void *function()
の意味について混乱しています。
それは関数へのポインタですか、それともvoid*
を返す関数ですか?ポインターを返す再帰関数としてデータ構造で常に使用してきましたが、マルチスレッド(pthread
)でコードを見たとき、同じ関数宣言があります。今、それらの違いは何なのか混乱しています。
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*
を返します。これに慣れるには少し時間がかかりますが、いったん原理を理解すれば、これらの宣言を明確に読むのは簡単です。