web-dev-qa-db-ja.com

void * function()は関数へのポインターですか、それともvoid *を返す関数ですか?

void *function()の意味について混乱しています。
それは関数へのポインタですか、それともvoid*を返す関数ですか?ポインターを返す再帰関数としてデータ構造で常に使用してきましたが、マルチスレッド(pthread)でコードを見たとき、同じ関数宣言があります。今、それらの違いは何なのか混乱しています。

26
user9515151

C/C++での宣言は、識別子から外側に向かって読み取られます次の演算子の優先順位

wikipedia のC/C++演算子優先順位表をざっと見てみると、関数呼び出し演算子()が間接演算子*よりも優先順位が高いことがわかります。したがって、関数宣言は次のようになります。

  • 識別子から開始:function is

  • function()引数を取らない関数

  • void* function()およびvoid*を返します。

この一般的な原則は、配列宣言([]*よりも優先されます)とその2つの組み合わせにも当てはまります。そう

int *(*arr[42])();

と読まれます

  • arr
  • arr[42] 42要素の配列である
  • *arr[42]へのポインタ
  • 引数を取らない(*arr[42])()関数
  • int *(*arr[42])()int*を返します。

これに慣れるには少し時間がかかりますが、いったん原理を理解すれば、これらの宣言を明確に読むのは簡単です。