4

例如,查看以下(抽象)声明:

int (*) (*)

// 指向返回 int 且不带参数的函数的指针

(我从以下网站获得:http: //www.vineetgupta.com/blog/deciphering-complex-c-declarations

我认为只有 void 意味着没有争论。这真的意味着同样的事情:

int (*) (void)

如果是这样,它在哪里声明 * 可用于指定无参数?

另外,我假设这样的抽象声明只存在于类型转换是否正确?如果是这样,那么它在当前形式下一定是无效的,因为它缺少括号,对吗?所以int(*)(void)无效,但(int(*)(void))有效,不是吗?

4

2 回答 2

13

指向返回 int 且不带参数的函数的指针

这是不对的 - 该函数将指针作为其参数,但由于缺少类型说明符,因此假定指针的基本类型为int. 这是古老的(准标准)行为,有些编译器允许,有些则不允许。

我认为只有 void 意味着没有争论。这真的意味着同样的事情:

int (*) (void)

不,它没有,原因如上所述。

另外,我假设这样的抽象声明只存在于类型转换是否正确?

不,它们也可以在函数声明的函数参数列表中使用。所以,

int factorial(int);

很好,也很好

void qsort(void *, size_t, size_t, int (*)(const void *, const void *));
于 2013-07-20T07:45:38.277 回答
0

编辑

 int (*) (*)  

当我在visual studio中尝试时导致错误,它不是声明的方式。

如果您希望函数指针以指针作为参数返回整数数据,则正确的方法如下。

 int(*foo)(datatype *).

数据类型可以在哪里

  int ,float,char etc

而且void*不一样。

于 2013-07-20T07:42:19.123 回答