int*p=&a[0]的含义是什么 改成int*p=&a会有什么变化



qq_改恒_0
浏览 2660回答 1
1回答

onemoo

&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] 是等价的。
打开App,查看更多内容
随时随地看视频慕课网APP