関数ポインタ: コードを指す

データだけでなく「処理」も変数に入れて持ち運べる。

関数ポインタ
関数のアドレスを格納する変数。
コールバック関数
他の関数に引数として渡され、後で呼び出される関数のこと。
コントローラーのボタン (Programmable Button)

関数ポインタは、ゲームの「キーコンフィグ(ボタン設定)」です。 「Aボタン」という変数(ポインタ)に最初は「ジャンプ(関数)」を割り当て、後で「攻撃(別の関数)」に切り替えることができます。 ボタンを押す側(呼び出し元)は、現在そこに何が設定されているかを知らなくても、ただ「Aボタンを押すだけ」で適切なアクションを実行できます。

関数の住所

プログラムのコード(機械語)もメモリ上にロードされています。つまり、関数にも「アドレス」があります。

関数のアドレスを変数に保存したものを「関数ポインタ」と呼びます。これを使うと、 「実行する処理」を動的に切り替えたり、別の関数に「この処理を使ってね」と渡したり(コールバック) できます。

Function Pointer Syntax
// 関数ポインタの宣言と使用
// intを受け取りintを返す関数のポインタ
int (*func_ptr)(int);
int square(int n) { RETURN n * n; }
int main(void) {
func_ptr = square; // アドレスを代入
// 関数みたいに使える
printf("%d\n", func_ptr(5)); // 25
return 0;
}