在C中,当用作函数参数时,*也表示与void相同吗?

时间:2013-07-20 07:31:16

标签: c

例如,请查看以下(摘要)声明:

int (*) (*)

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

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

我认为只有无效意味着没有争论。这是否真的意味着:

int (*) (void)

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

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

2 个答案:

答案 0 :(得分:13)

  

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

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

  

我认为只有无效意味着没有争论。这是否真的意味着:

int (*) (void)

不,由于上述原因,它没有。

  

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

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

int factorial(int);

非常好,

也是如此
void qsort(void *, size_t, size_t, int (*)(const void *, const void *));

答案 1 :(得分:0)

修改

 int (*) (*)  
当我在visual studio中尝试而不是声明的方式时,

会导致错误。

如果你想让一个函数指针返回一个带有指针作为参数的整数数据,那么正确的方法是在下面。

 int(*foo)(datatype *).

数据类型可以是

  int ,float,char etc

无效 * 不一样。