int (*func)();
関数ポインタの宣言です。関数ポインタは基本的に、関数のアドレスを保持する変数です。この場合、 をfunc
指す関数の型は、引数を取らず、 を返す関数ですint
。次のように、関数のアドレスをこの変数に割り当てることができます。
func = foo;
foo
プロトタイプを持つ関数はどこにありますかint foo();
。
関数がこの変数に割り当てられると、次のfunc
ように指す関数を呼び出すことができます。
(*func)();
別の構文 (同等) がありますが、これはより明確だと思います。
func();
したがって、foo
が に割り当てられた場合func
、上記の両方の例では実際に関数 が呼び出されますfoo
。
値を関数ポインターにキャストすることもできます。コード例では
(int (*)())
引数を取らず、 を返す関数ポインタへのキャストint
です。これは、本質的に achar*
を関数 pointer に代入することについてコンパイラが文句を言わないようにするためfunc
です。
上記のコードには、最後に 1 つのことがあります。が呼び出された後func
、結果は (何らかの理由で) にキャストされますint
。私が知る限り、このキャストはまったく不要です。だから最後の行
(int)(*func)();
で置き換えることができます
(*func)();