関数もメモリ上のどこかに置かれるわけですから、アドレスがあるのでしょうきっと。
従って関数へのポインタがあっても不思議ではありません。使い方は、きわめて
簡単です。関数名そのものがその関数のアドレスとなります。function()という関数
があったとしたらfunctionがアドレスになります。また、関数の引数として
関数のアドレスを使うこともできます。
カッコの使い方さえわかれば関数へのポインタもどうと言うことはないですね。
わざわざ、関数へのポインターなんか使わなくても
こんなプログラムはすぐに作れるのに・・・などと
思ってはいけません。こういう簡単なプログラムをたくさん
書くことによってプログラムの力が付くのです(多分)。
次にちょっとカッコの付け方の補足をします。
int *ptr();とするとint型へのポインタを返すptr関数という意味になります。
int (* ptr)();とすると整数を返す関数へのポインタptrという意味になります。
演算子の優先順位表を見ると関数呼び出しの()と間接参照*では 関数呼び出しの()の方が優先順位が高いのです。従って最初の例では ptr()が最初にあって、これに*がついたことになります。
次に関数へのポインタを要素とする配列を考えることもできます。 この時配列要素の[]と関数呼び出しの()は同じ優先順位です。 しかしこの順位においては、結合性は左から右方向となります。 従って関数へのポインタを要素とする配列は次のように宣言します。
int (*p[])();
いろいろ考えると頭が変になるのでこのように覚えてしまいましょう。
こういう複雑なことは、実際のプログラムではあまり出てきません。
しかし、大学などで講義で習うCでは、試験問題として出てきそうですね。
(筆者のCは、すべて独学なので大学ではどんなCの講義がされているのか知らない。)
Update Nov/28/1996 By Y.Kumei