変数を指すポインタはありますが、関数を指すポインタも使う事ができます。
関数のポインタは、そのアドレス値を使って関数を呼び出す事ができます。
#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);
と言う記述方法も可能です。
使いやすい方を使って下さい。
関数のポインタは、プログラマの腕によって高度な使い方も可能ですので、
機会があれば使ってみて下さい。