V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
MrVito
V2EX  ›  问与答

关于取数组名的地址,我有一点疑惑(c++)

  •  
  •   MrVito · Jun 29, 2018 via Android · 2521 views
    This topic created in 2870 days ago, the information mentioned may be changed or developed.

    int a[5] &a 为什么不是一个指向指针的指针呢 a 是 a[0]的地址,就是说 a 是一个指向 int 的指针?请 V 友们解答一下,困扰我 2 小时了......

    10 replies    2018-06-30 09:26:16 +08:00
    CEBBCAT
        1
    CEBBCAT  
       Jun 29, 2018
    没看懂,似乎有点语义不同,注意断句
    CEBBCAT
        2
    CEBBCAT  
       Jun 29, 2018
    @CEBBCAT #1 不同 -> 不通
    CEBBCAT
        3
    CEBBCAT  
       Jun 29, 2018
    你可能需要这个:[C 语言 数组名不是首地址指针
    ]( https://www.cnblogs.com/liqiuhao/p/7737539.html)

    搜索过程:


    @Livid 请问在有可能支持 ![]() 中使用 data:image/png;base64,…… 而非 https://…… 吗?(我知道暂时只能够在主题帖中使用 Markdown )
    fbcskpebfr
        4
    fbcskpebfr  
       Jun 29, 2018 via Android
    int a[5] 的情况下,&a 的返回值是指向指针的指针。。。但&a 他是一个表达式,肯定不是变量呀
    Monad
        5
    Monad  
       Jun 29, 2018
    因为 a 的类型是 int[5] 只是可以退化成 int*
    fbcskpebfr
        6
    fbcskpebfr  
       Jun 29, 2018 via Android
    @ruimz 我是一个没学到编译的…
    感觉 3 楼发的很有道理
    解决了我一些关于数组指针的原理问题。
    还是不要看我了
    lance6716
        7
    lance6716  
       Jun 29, 2018 via Android
    int i; &&&&&&i 根本没有意义
    xfcy
        8
    xfcy  
       Jun 29, 2018 via Android
    我记得《 C 专家编程》中有提到这个问题,楼主不妨去查查看。
    msg7086
        9
    msg7086  
       Jun 30, 2018
    如果 a 是数组,那么&a 就是 a 的地址。打印&a 和 a 的结果是相同的。
    然后 a+1 是加一个元素长度( 4 字节),而&a+1 是加整整一个数组的长度( 20 字节),他们的类型还是有区别的。
    700388
        10
    700388  
       Jun 30, 2018
    楼主的意思是想要 a[5] 的地址吧,c++确实不支持数组 下面子地址访问。因为没必要。 数组的单个变量地址,拿来干什么?根本没用,所以 c++之所以给数组的整体地址,便于传值和修改,而不给子地址。
    要想访问 int &b=a[5]; 这样就可以看到子地址。实际并无用。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3331 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 00:33 · PVG 08:33 · LAX 17:33 · JFK 20:33
    ♥ Do have faith in what you're doing.