johnnyb
V2EX  ›  C

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

  •  
  •   johnnyb · May 22, 2013 · 2368 views
    This topic created in 4738 days ago, the information mentioned may be changed or developed.
    可以类比数组名和首地址来理解么:a 等于 &a[0],p = foo 和 p = &foo 也是一样的。
    但是到函数指针调用这里要怎么描述呢,有点捉急了 :|
    9 replies    1970-01-01 08:00:00 +08:00
    johnnyb
        1
    johnnyb  
    OP
       May 22, 2013   ❤️ 1
    这样推理:
    (p)() --> (foo)() --> (&foo)() --> (*(&foo))() --> (*p)()
    ipoh
        2
    ipoh  
       May 22, 2013
    void f(){}

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


    @ltzliwe 是这一段么?只说要记住p是*p的简写。
    ltzliwe
        7
    ltzliwe  
       May 23, 2013
    @johnnyb 对的。。那是我没有记清楚了,不好意思
    lotem
        8
    lotem  
       May 23, 2013
    幻想如果能这样写就更帅了 fp->()
    ltzliwe
        9
    ltzliwe  
       May 23, 2013   ❤️ 1
    @johnnyb 试了一下。。发现 (*fp) (fp) (&fp) 的编译结果都是fp的函数入口地址。应该不用太纠结这个东西我觉得
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   983 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 22:16 · PVG 06:16 · LAX 15:16 · JFK 18:16
    ♥ Do have faith in what you're doing.