那么函数指针的*可以省略吗?

时间:2013-01-07 11:39:36

标签: c function-pointers shorthand

gcc似乎告诉我int foo(int (*f)(void))int foo(int (f)(void))相同 f是指向不返回int的参数的函数的指针。为什么我们可以在这里省略*

但是,我也尝试了int (*p)(void)int (p)(void)。第一个p是函数指针,第二个是函数。

那么,发生了什么?在什么情况下可以省略星号? 我在K& R中查找并没有发现任何东西。

1 个答案:

答案 0 :(得分:7)

引用我的Harbison和Steele副本(第5版,第9.3节):

  

在参数列表中,类型“返回T的函数”被隐式重写为具有“指向函数返回T的指针”。

这意味着在形式参数列表的上下文中,它们是等价的。在任何其他情况下,它们都是不同的。

作为一种风格问题,我永远不会忽略*。