解释这些函数指针声明的区别。

3
请强调以下函数声明的区别:
  1. void (*p) (void *a[], int n)

  2. void *(*p[]) (void *a, int n)

第一个函数声明是一个指向函数的指针,该函数接受一个指向void类型数组的指针和一个整数作为参数,并返回void类型。第二个函数声明是一个指向函数指针数组的指针,该函数接受一个指向void类型的指针和一个整数作为参数,并返回一个指向void类型指针的指针。
3个回答

6
  1. void (*p) (void *a[], int n) 定义了一个指针,它指向一个接受void*数组和一个int作为参数的函数。

  2. void *(*p[]) (void *a, int n) 定义了一个指针数组,其中每个指针指向一个返回void*的函数,并接受一个void*和一个int作为参数。


5
既不是函数声明,因此没有什么需要解释的。
但两者都是函数指针的声明。 有一个非常好的教程网站tutorial website,你应该去浏览一下。
我还应该建议一个方便的程序cdecl(或其在线版本); 也许在有人为你揭示答案之前,你想自己试一试?
(您需要在网站上键入void *(*p[]) (void *, int); 即函数参数没有标识符。)

0

编辑:算了,我误读了声明。抱歉。

问题是,正如其他人已经指出的那样,你正在声明函数指针,而不是函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接