私はポインタと関数ポインタをよく知っていますが、これは混乱します。私は関数を持っていて、ここに関数ヘッダがあります。関数内の関数がポインタと見なされるのはなぜですか?
void report(List*, bool check(Item*, void*), void*);
実際の関数は、ヘッダファイルにプロトタイプと同様に実装されています。メインのプロトタイプはbool check(Item*, void*);
です。基本的には、戻り値check
に基づいてリストから項目を報告します。 main.c
で関数を呼び出すとき、report(list, check(item, specificArg), arg);
を使用します。arg
/specificArg
が基本的に必要なものであれば、私がvoidポインタを使用している唯一の理由です。しかし、問題は、check(item, specificArg)
である場合、コンパイラレポート:
incompatible integer to pointer conversion passing 'bool' to parameter of type 'bool (*)(Item *, void *)'
さて、このような場合には、どのように私は、私の 'int型とspecificArg'、またはcharを上書きしません'specificArg'がプロトタイプでvoidとして宣言されていれば? – compolo
私が正しく理解していれば、 'report'の中から' arg'を 'specificArg'として' check'を呼び出すのですか?その場合、 'report'から' check(item、arg) 'と呼び、' check'の中で変換を行います。 –