int a[5],*p表达式a=a+2为什么是错的表达式p-a又为什么是对的

1个回答
展开全部
摘要 对于int a[5],*p;
p=a; 或p=&a[0]是正确的
p=&a严格来说是错误的
首先要搞清楚a与&a的区别:a表示数组首元素的首地址,即元素a[0]的地址;&a表示整个数组的地址。二者的值是相同的,但意义并不一样。正如成都市政府与四川省政府的地址都在成都,但二者表示的含义不同。
如下图所示,a表示a[0]的地址
&a则表示整个数组的地址
二者的值之所以相同,因为地址是取自第一个字节的地址,数组元素a[0]的第一个字节与整个数组的第一个字节显然是相同的。
a与&a[0]及&a的值如下:
1244980,1244980,1244980
a+1与&a[0]+1值如下:
1244984,1244984
但&a+1的值为1245000。
a+1与&a[0]+1都是表示下一个数组元素的地址,以元素为单位相加,地址值+4。而&a+1表示下一个数组的地址,以数组为单位相加,地址值+20.
所以,p=a; 或p=&a[0]是正确的,表示指针p指向数组的首元素。
咨询记录 · 回答于2021-12-01
int a[5],*p表达式a=a+2为什么是错的表达式p-a又为什么是对的
您好 可以把问题表达清楚吗
对于int a[5],*p;p=a; 或p=&a[0]是正确的p=&a严格来说是错误的首先要搞清楚a与&a的区别:a表示数组首元素的首地址,即元素a[0]的地址;&a表示整个数组的地址。二者的值是相同的,但意义并不一样。正如成都市政府与四川省政府的地址都在成都,但二者表示的含义不同。如下图所示,a表示a[0]的地址&a则表示整个数组的地址二者的值之所以相同,因为地址是取自第一个字节的地址,数组元素a[0]的第一个字节与整个数组的第一个字节显然是相同的。a与&a[0]及&a的值如下:1244980,1244980,1244980a+1与&a[0]+1值如下:1244984,1244984但&a+1的值为1245000。a+1与&a[0]+1都是表示下一个数组元素的地址,以元素为单位相加,地址值+4。而&a+1表示下一个数组的地址,以数组为单位相加,地址值+20.所以,p=a; 或p=&a[0]是正确的,表示指针p指向数组的首元素。
这是我查找到的问题答案
那我这道题目呢
开头的那两行就是
已赞过
你对这个回答的评价是?
评论 收起
下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消