1 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
&a 表示取整个数组的地址,得到的是指向数组的指针。
而 &a[0] 是直接取数组第一个元素的地址,得到的是 int 指针。
不过呢,虽然 &a 和 &a[0] 的类型不同,但它们的值是一样的。而 int *p = &a 是强行把数组指针赋值给 int 指针,所以 p 还是指向了 a 的第一个元素的地址。后续按照指向数组元素的指针来使用 p 也能正常工作。
但是注意,应该避免写 int *p = &a 这样的代码。 因为这毕竟和使用意图不符——等号左侧想要的是 int 指针类型,等号右侧却是数组指针类型——等号两侧的类型本不兼容,只不过恰好值相同且被强制转型才碰巧可以正常工作的。 而且这样的代码在编译时会得到类型不符的警告的。
另外说一种可行的写法:当你直接在等号右侧使用数组名 a 时,就等于使用 a 的第一个元素的地址,也就是 int 指针类型。
你可以写 int *p = a, 这和 int *p = &a[0] 是等价的。
- 1 回答
- 0 关注
- 2659 浏览
添加回答
举报
0/150
提交
取消