C言語 関数ポインタとは?

変数を指すポインタはありますが、関数を指すポインタも使う事ができます。
関数のポインタは、そのアドレス値を使って関数を呼び出す事ができます。

#include <stdio.h>

int menseki(int teihen, int takasa);

void main(void) {
      int ans;
      int (*kp)(int, int); // 関数ポインタの宣言
   
      // menseki関数のアドレスを関数ポインタkpへ代入
      kp = menseki;

      // 関数ポインタkpを使ってmenseki関数の呼び出し
      ans = (*kp)(10, 5);

      printf("面積=%d\n", ans);

}

int menseki(int teihen, int takasa)
{
      return teihen * takasa / 2;
}

このプログラムの関数ポインタ宣言では、
戻り値がint型で第1、第2引数にint型を持つタイプのポインタが宣言されています。

この関数ポインタに、戻り値の型が違う関数や、
引数の型が違う関数、引数の数が違う関数のアドレスを代入して

関数を呼び出すとコンパイル時に警告やエラーがでたり、
実行時に意図しない動作する場合があります。

宣言時と同じ戻り値、同じ引数の型、同じ引数の数を持つ関数のアドレスだけを
代入して使う
ようにしましょう。

関数ポインタによる関数呼び出しのところでは、

ans = kp(10, 5);

と言う記述方法も可能です。

使いやすい方を使って下さい。


関数のポインタは、プログラマの腕によって高度な使い方も可能ですので、
機会があれば使ってみて下さい。