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

2018-06-29 20:03:20 +08:00
 MrVito

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

1901 次点击
所在节点    问与答
10 条回复
CEBBCAT
2018-06-29 20:19:34 +08:00
没看懂,似乎有点语义不同,注意断句
CEBBCAT
2018-06-29 20:19:49 +08:00
@CEBBCAT #1 不同 -> 不通
CEBBCAT
2018-06-29 20:37:24 +08:00
你可能需要这个:[C 语言 数组名不是首地址指针
]( https://www.cnblogs.com/liqiuhao/p/7737539.html)

搜索过程:


@Livid 请问在有可能支持 ![]() 中使用 data:image/png;base64,…… 而非 https://…… 吗?(我知道暂时只能够在主题帖中使用 Markdown )
ruimz
2018-06-29 20:45:06 +08:00
int a[5] 的情况下,&a 的返回值是指向指针的指针。。。但&a 他是一个表达式,肯定不是变量呀
Monad
2018-06-29 20:51:05 +08:00
因为 a 的类型是 int[5] 只是可以退化成 int*
ruimz
2018-06-29 21:00:37 +08:00
@ruimz 我是一个没学到编译的…
感觉 3 楼发的很有道理
解决了我一些关于数组指针的原理问题。
还是不要看我了
lance6716
2018-06-29 21:02:34 +08:00
int i; &&&&&&i 根本没有意义
xfcy
2018-06-29 21:07:39 +08:00
我记得《 C 专家编程》中有提到这个问题,楼主不妨去查查看。
msg7086
2018-06-30 02:11:36 +08:00
如果 a 是数组,那么&a 就是 a 的地址。打印&a 和 a 的结果是相同的。
然后 a+1 是加一个元素长度( 4 字节),而&a+1 是加整整一个数组的长度( 20 字节),他们的类型还是有区别的。
700388
2018-06-30 09:26:16 +08:00
楼主的意思是想要 a[5] 的地址吧,c++确实不支持数组 下面子地址访问。因为没必要。 数组的单个变量地址,拿来干什么?根本没用,所以 c++之所以给数组的整体地址,便于传值和修改,而不给子地址。
要想访问 int &b=a[5]; 这样就可以看到子地址。实际并无用。

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

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

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

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

© 2021 V2EX