サンプルプログラム ptr4.c
(13-3)関数へのポインタ
関数はプログラムでメモリ上のどこかに存在しますので当然ですがアドレス値があります。
関数名はそのアドレス値を持っています。
関数へのポインタは、その関数名が持つアドレス値を保持するポインタで関数を呼び出すことができます。
関数へのポインタの宣言の仕方
関数へのポインタの宣言はちょっと複雑になります。
またコンパイラによってはバグがあって記述が正しくてもコンパイルできない場合もあります。
よって、関数へのポインタを利用するときはできるだけシンプルにした方が良いと思います。
#include <stdio.h>
int add( int x, int y )
{
int z;
z = x + y;
return( z );
}
void main( void )
{
int x, y, z;
int (*p)(int,int); // 関数へのポインタの宣言です
x = 1;
y = 2;
p = add; // add関数のアドレス値を代入しています
z = p( x, y ); // add関数を関数へのポインタを使って呼び出し!
printf( "z = %d\n", z );
}
プログラムの実行結果は以下のようになります。
z = 3
関数へのポインタの宣言のところで変数pとアスタリスクに(*p)と括弧を付けていますが、これは優先順位の都合でこうなります。
あとは続けて引数を記述しています。
GCCはこれくらいはバグらずにコンパイルしてくれるようです。
関数へのポインタは使い方次第で結構便利に使えますので覚えておくとよいと思います。