4

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

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

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

4

1 回答 1

7

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

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

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

就风格而言,我永远不会省略 *.

于 2013-01-07T11:50:28.033 回答