2つの質問があります
1.見ました
int (*Ptr)(int,int);
Ptr=someOtherFuncion;
そんなはずないでしょ?
Ptr=&someOtherFuncion;
2.その関数ポインタはそのようなコールバック用であることを学びます
someOtherFunction(functionPointer)
ポインターではない通常の関数を配置する場合の違いは何ですか?
関数の名前は、ほとんどすぐに関数へのポインターに減衰するため、明示的に指定someOtherFunction
したのと同じポインターに減衰します。&someOtherFunction
実際、アドレス取得演算子 ( ) のオペランドは、減衰が起こらない&
数少ない場所の 1 つです。
これには面白い結果があります。関数ポインターを逆参照しても、すぐに再び減衰します。したがって、以下はすべて同等です。
someOtherFunction(1, 2);
(*someOtherFunction)(1, 2);
(**someOtherFunction)(1, 2);
(***someOtherFunction)(1, 2);
そのため、明示的なアドレス指定なしで関数ポインターに代入するのが苦手な場合は、&
必ずそこに入れますが、そうする必要はありません。
質問の 2 番目の部分に対処するには: 関数は常に関数ポインターを介して呼び出されますが、上記の瞬間的な減衰のために、通常の関数は関数ポインターとまったく同じ方法で呼び出すことができます。