-1

しばらく前からこの質問をしようと思っていました。これらの関数で何が起こっているのですか? 括弧内に名前があるのはなぜですか?

void        (*think)(gentity_t *self);
void        (*reached)(gentity_t *self);    // movers call this when hitting endpoint
void        (*blocked)(gentity_t *self, gentity_t *other);
void        (*touch)(gentity_t *self, gentity_t *other, trace_t *trace);
4

3 に答える 3

3

あなたの例では、関数名の括弧は、関数アドレスを指す変数を意味します。括弧を使用しない場合

void * think(gentity_t *self);// equal (void *) think(gentity_t *self); 

名前:think、戻り値: void *、パラメーター: gentity_t *self; の関数の定義を意味します。これらは関数を指す変数です。

于 2017-08-18T01:04:38.007 に答える
2

これらの宣言は、関数を指す関数ポインターであり、いつでも変更できます。

C の関数ポインターは非常に便利なので、いくつか調査することをお勧めします。

C++ を知っている場合std::function、これらは事実上古い C バージョンです。

于 2017-08-18T01:03:48.377 に答える