関数ポインタとは、サブルーチン(関数)のメモリアドレスを格納でき、指定した仮引数や戻り値のデータ型でそのサブルーチンを呼び出せるポインタのことです。
関数ポインタの宣言とは、「関数ポインタの名前」と「仮引数のデータ型」と「戻り値のデータ型」を指定して、その関数ポインタをソースコード上で使えるようにすることです。
例えば、あるプログラミング言語では、関数ポインタの名前をp、一つ目の仮引数のデータ型を整数型int、二つ目の仮引数のデータ型もint、戻り値のデータ型もintとした場合、関数ポインタを以下のように宣言できます。
int (*p)(int, int);
上記の関数ポインタpには、仮引数の数、仮引数のそれぞれのデータ型、戻り値のデータ型が同じサブルーチンのメモリアドレスを代入します。
例えば、以下は、関数ポインタpに対応したサブルーチンaddのメモリアドレスをpに代入する例です。
int add(int a, int b){
int y = a + b;
return y;
}
int (*p)(int, int);
p = add;
この場合、addでサブルーチンaddのメモリアドレスを参照できます。
関数ポインタの宣言と初期化を同時に行うには、以下のようにします。
int add(int a, int b){
int y = a + b;
return y;
}
int (*p)(int, int) = add;
上記の関数ポインタpが指し示すサブルーチンを呼び出すには、以下のようにします。
int c = (*p)(1, 2);
この場合、関数ポインタpは、サブルーチンaddを指し示すため、1と2がaddへの引数となり、戻り値の3が変数*cに代入されます。
なお、このプログラミング言語では、以下の記述でも関数ポインタpが指し示すサブルーチンを呼び出せます。
int c = p(1, 2);