関数ポインタ

関数ポインタとは、サブルーチン(関数)のメモリアドレスを格納でき、指定した仮引数や戻り値のデータ型でそのサブルーチンを呼び出せるポインタのことです。

関数ポインタの宣言

関数ポインタの宣言とは、「関数ポインタの名前」と「仮引数のデータ型」と「戻り値のデータ型」を指定して、その関数ポインタをソースコード上で使えるようにすることです。

例えば、あるプログラミング言語では、関数ポインタの名前を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);