13

関数ポインターを変数に割り当てるための正しい構文について少し混乱しています。関数 foo がある場合

int foo();

foo へのポインタを変数 bar に代入しています

void * bar;

使っても問題ないようです

bar = foo; 
// or 
bar = &foo; 

これらのうちの1つだけが正しいと思われますか、それとも何か不足していますか?

4

2 に答える 2

13

foo&foo値はCで同等であり、同じタイプです。

ここでの&演算子は正しいですが、冗長です。

関数ポインタをaに割り当てることはvoid *、Cでは無効であることに注意してください。

void *fp1 = foo;   // invalid
int (*fp2)() = foo;  // valid
int (*fp3)() = &foo; // valid

(これらは実際には宣言ですが、代入演算子の制約が適用されます。)

于 2013-03-07T20:10:10.940 に答える