void**型を引数として受け取る関数について
Posted: 2011年1月18日(火) 22:34
現在C言語を勉強しているのですが、void **型の引数を受け取る場合の動作が分からず困っています。
関数がvoid *型の引数を受け取る場合、呼び出し側ではキャストせずに任意の型のポインタを渡すことができますが、void **型の引数を渡す場合には明示的に(void**)とキャストしないとコンパイルでエラーが発生します。
なぜvoid *型を渡す場合はキャストの必要がないのに、void **型ではキャストが必要になるのでしょうか?
いろいろ調べてみたのですが、void*型や通常の変数の**型について説明しているサイトは見つかりましたが、void**型について説明しているサイトが見つからなかっため質問させて頂きます。
開発環境等の情報は以下の通りです。
よろしくお願いします。
・環境
WindowsXP SP3、VC6.0
・コンパイルエラーの内容
error C2664: 'test' : 1 番目の引数を 'char ** ' から 'void ** ' に変換できません。 (新しい機能 ; ヘルプを参照)
指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
・テスト用のソース
関数がvoid *型の引数を受け取る場合、呼び出し側ではキャストせずに任意の型のポインタを渡すことができますが、void **型の引数を渡す場合には明示的に(void**)とキャストしないとコンパイルでエラーが発生します。
なぜvoid *型を渡す場合はキャストの必要がないのに、void **型ではキャストが必要になるのでしょうか?
いろいろ調べてみたのですが、void*型や通常の変数の**型について説明しているサイトは見つかりましたが、void**型について説明しているサイトが見つからなかっため質問させて頂きます。
開発環境等の情報は以下の通りです。
よろしくお願いします。
・環境
WindowsXP SP3、VC6.0
・コンパイルエラーの内容
error C2664: 'test' : 1 番目の引数を 'char ** ' から 'void ** ' に変換できません。 (新しい機能 ; ヘルプを参照)
指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
・テスト用のソース