V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
johnnyb
V2EX  ›  C

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

  •  
  •   johnnyb · 2013-05-22 18:40:27 +08:00 · 1642 次点击
    这是一个创建于 4211 天前的主题,其中的信息可能已经有所发展或是发生改变。
    可以类比数组名和首地址来理解么:a 等于 &a[0],p = foo 和 p = &foo 也是一样的。
    但是到函数指针调用这里要怎么描述呢,有点捉急了 :|
    9 条回复    1970-01-01 08:00:00 +08:00
    johnnyb
        1
    johnnyb  
    OP
       2013-05-22 18:51:04 +08:00   ❤️ 1
    这样推理:
    (p)() --> (foo)() --> (&foo)() --> (*(&foo))() --> (*p)()
    ipoh
        2
    ipoh  
       2013-05-22 19:44:18 +08:00
    void f(){}

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


    @ltzliwe 是这一段么?只说要记住p是*p的简写。
    ltzliwe
        7
    ltzliwe  
       2013-05-23 20:00:14 +08:00
    @johnnyb 对的。。那是我没有记清楚了,不好意思
    lotem
        8
    lotem  
       2013-05-23 20:03:33 +08:00
    幻想如果能这样写就更帅了 fp->()
    ltzliwe
        9
    ltzliwe  
       2013-05-23 20:43:53 +08:00   ❤️ 1
    @johnnyb 试了一下。。发现 (*fp) (fp) (&fp) 的编译结果都是fp的函数入口地址。应该不用太纠结这个东西我觉得
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2951 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:39 · PVG 20:39 · LAX 04:39 · JFK 07:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.