C语言函数指针问题:为什么 (*p)() 和 (p)() 是一样的?

2013-05-22 18:40:27 +08:00
 johnnyb
可以类比数组名和首地址来理解么:a 等于 &a[0],p = foo 和 p = &foo 也是一样的。
但是到函数指针调用这里要怎么描述呢,有点捉急了 :|
1658 次点击
所在节点    C
9 条回复
johnnyb
2013-05-22 18:51:04 +08:00
这样推理:
(p)() --> (foo)() --> (&foo)() --> (*(&foo))() --> (*p)()
ipoh
2013-05-22 19:44:18 +08:00
void f(){}

f == &f
detailyang
2013-05-22 19:50:32 +08:00
没啥 规定就是如此..不要问为啥 = =
inccinf
2013-05-22 19:53:17 +08:00
貌似就是为了满足两种不同习惯而已,不用解释为什么
ltzliwe
2013-05-22 20:20:53 +08:00
记得是 对于函数正确的是带*,不带*的会被默认加上*
《C陷阱与缺陷》里面好像有提到,晚上回去再看一下= =
johnnyb
2013-05-23 18:38:10 +08:00


@ltzliwe 是这一段么?只说要记住p是*p的简写。
ltzliwe
2013-05-23 20:00:14 +08:00
@johnnyb 对的。。那是我没有记清楚了,不好意思
lotem
2013-05-23 20:03:33 +08:00
幻想如果能这样写就更帅了 fp->()
ltzliwe
2013-05-23 20:43:53 +08:00
@johnnyb 试了一下。。发现 (*fp) (fp) (&fp) 的编译结果都是fp的函数入口地址。应该不用太纠结这个东西我觉得

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/69818

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX