2017-05-20 14 views
1

(int(*)(void *、void *))(数値?numcmp:strcmp));ポインタによる関数の参照

numcmpとstrcmpは、2つの引数を持つ関数です。

私は条件演算子が何をしているのか理解しています。それは簡単です。

これはnumcmp(void *、void *)またはstrcmp(void *、void *)と評価されることがありますが、その理由はわかりません。特に、: int(*)は私を混乱させます。

+0

[Cでの関数ポインタはどのように動作するのですか?](0120-17753)。 – Siguza

+0

なぜ構文それは(それほど厄介な)方法ですか? –

+0

サイドノート:結果のポインタを呼び出すことはUBです。 'strcmp'のパラメータは' void * 'ではなく、' numcmp'のものでもありません(そうでなければ、条件はコンパイルされません)。もちろん、それはあなたがそのキャストでそれをシャットダウンしなければあなたが得るコンパイラエラーです。 – Quentin

答えて

3

(int (*) (void*, void*))は、を返す2つの引数を持つ関数ポインタへのキャストにすぎません。他のキャストの場合、構文は変数名のない変数宣言に似ています。ブールスイッチに応じて、どの関数をキャストするかが決定されます。

関連する問題