次の関数宣言の違いを強調してください。
void (*p) (void *a[], int n)void *(*p[]) (void *a, int n)
次の関数宣言の違いを強調してください。
void (*p) (void *a[], int n)
void *(*p[]) (void *a, int n)
void (*p) (void *a[], int n)配列とパラメーターを受け取る関数へのポインターを定義しますvoid*int
void *(*p[]) (void *a, int n)を返す関数へのポインタの配列をvoid*void*int定義し、パラメータとしてaとaを取ります。
どちらも関数宣言ではないので、説明することは何もありません。
ただし、どちらも関数ポインタの宣言です。あなたが消費すべき優れたチュートリアルウェブサイトがあります。
cdeclまた、便利なプログラム(またはそのオンラインの化身)を提案する必要があります。誰かがあなたのために答えを明らかにする前に、おそらくあなたはそれを自分で試してみたいですか?
(Webサイトに入力する必要がありvoid *(*p[]) (void *, int)ます。つまり、関数の引数の識別子はありません。)
編集:気にしないでください、私は宣言を読み間違えました。ごめん。
重要なのは、人々がすでに指摘したような関数ではなく、関数ポインタを宣言しているということです。