gcc
似乎告诉我int foo(int (*f)(void))
与int foo(int (f)(void))
相同
f
是指向不返回int
的参数的函数的指针。为什么我们可以在这里省略*
。
但是,我也尝试了int (*p)(void)
和int (p)(void)
。第一个p
是函数指针,第二个是函数。
那么,发生了什么?在什么情况下可以省略星号? 我在K& R中查找并没有发现任何东西。
答案 0 :(得分:7)
引用我的Harbison和Steele副本(第5版,第9.3节):
在参数列表中,类型“返回T的函数”被隐式重写为具有“指向函数返回T的指针”。
这意味着在形式参数列表的上下文中,它们是等价的。在任何其他情况下,它们都是不同的。
作为一种风格问题,我永远不会忽略*。