首页 > 其他 > 详细

一 *(a+1)与*(&a+1)

时间:2020-02-04 12:51:04      阅读:51      评论:0      收藏:0      [点我收藏+]

int a[5]={1,2,3,4,5};
int *ptr = (int*)(&a+1);
问: *(a+1)是多少? *(ptr-1)是多少

答:
对一个类型为T的指针来说,比如 T* p
p++或者p+1 等价于 p+sizeof(T) 而不是简单的加1。
对一个数组来说,&a与&a[0]虽然数值相同,但是意义不同:
&a 是“数组a的首地址”,
&a[0]是“数组a首元素的地址”。
所以,&a+1 等价于 “数组a的首地址+sizeof(数组a)”,
1 2 3 4 5 未知 未知
a &a+1
ptr是对(&a+1)进行强制类型转换了,所以
ptr-1 等价于 “数组a的首地址+sizeof(数组a)-sizeof(int)”
1 2 3 4 5 未知
ptr-1 ptr
所以*(ptr-1)=5。
a+1-------数组首地址+sizeof(int)。
&a+1-----数组首地址+sizeof(数组a)
&a[0]+1---数组首地址+sizeof(int)。

所以,*(a+1)=2,*(ptr-1)=5

一 *(a+1)与*(&a+1)

原文:https://www.cnblogs.com/wuqi1003/p/12258705.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!