例如,请查看以下(摘要)声明:
int (*) (*)
//指向返回int且不带参数的函数的指针
(我从以下网站获得:http://www.vineetgupta.com/blog/deciphering-complex-c-declarations)
我认为只有无效意味着没有争论。这是否真的意味着:
int (*) (void)
如果是这样,它在哪里声明*可用于指定无参数?
另外,我是否正确假设这样的抽象声明只存在于类型转换中?如果是这样,那么它的当前形式必须是无效的,因为它缺少周围的括号吗?因此int(*)(void)
无效,但(int(*)(void))
有效,不是吗?
答案 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
和无效和 * 不一样。