調べてわかったことをまとめる。
関数ポインタ
その名の通り、関数を指すポインタ。次のように定義する。
// long型の引数を2つ受け取り、long型の値を返す、varという関数へのポインタ long (*var)(long, long);
ちなみに*varを囲むカッコを外してしまうと、long *を返す関数のプロトタイプ宣言になってしまう。なので外せない。
long *var(long, long);
関数ポインタへのキャスト
以下のようにキャストできる。
(long (*)(long, long))var
覚え方としては、関数ポインタの定義から識別子(ここでは関数名)を抜いたものとして覚えるのがよさそう。
(long (*var)(long, long)) ↓ (long (*)(long, long))