「関数へのポインタとtypedef」

引数を受け取らずint型を返却する関数へのポインタは、以下のように宣言できる。

int ( *func )(void);

このように、関数へのポインタは、その型の記述が複雑になるので、一般的にはtypedef宣言を
導入する。上の宣言は、次のように書き換えることができる。

typedef int fiv (void);
fiv *func;

ここでは、関数方にtypedef名を与えているが、関数へのポインタ型にtypedef名を与えると、
次にようにも記述できる。

typedef int (*piv)(void);
piv func;

たとえば、
int sum(void){・・・・}
という関数が与えられているとすると、ここで、
func = sum;
という代入によって、funcは関数sumを指すことになる。また、このとき
func();
によって、funcの指す関数すなわち関数sumを呼び出すことができる。