関数へのポインターは、その関数の実行可能コードのアドレスを示します。 ポインターを使用して関数を呼び出し、関数を引き数として他の関数に渡す ことができます。関数へのポインターに対してポインター演算を行うことはできません。
関数の戻りの型とパラメーター型の両方によって、関数へのポインターの型が決まります。
関数へのポインターの宣言では、ポインター名を小括弧に入れることが必要です。 関数呼び出し演算子 () は、間接参照演算子 * よりも高い優先順位を持っています。 括弧がないと、コンパイラーは、指定された戻りの型へのポインターを戻す関数として、 そのステートメントを解釈します。 次に例を示します。
int *f(int a); /* function f returning an int* */ int (*g)(int a); /* pointer g to a function returning an int */ char (*h)(int, int) /* h is a function that takes two integer parameters and returns char */
最初の宣言では、f は、int を引き数として取り、 int へのポインターを戻す関数として解釈します。 2 番目の宣言では、g を、int 引き数を 受け取り、int を戻す関数へのポインターと解釈します。
関連参照