首页 > 编程语言 > 详细

十五 数组与指针 推算程序结果

时间:2020-02-04 11:06:44      阅读:54      评论:0      收藏:0      [点我收藏+]

int a[4]={1,2,3,4};
int *p1=(int*)(&a+1);
int *p2=(int*)((int)a+1);
printf("%x,%x",p1[-1],*p2);

解析:
(1)
数组索引可以是负数,p1[-1]=*(p1-1),
1 2 3 4 未知
a p-1 &a+1
注意&a+1与&a[0]+1的区别,&a[0]+1=&a[1]。
∴p1[-1]=4=0x00000004。
(2)
(int)a后,a不再是指针,(int)a+1就是普通的加1,需要注意普通的+1就是加一个字节,字节是最小的存储单位,加1后通过(int*)((int)a+1)又被强制转换为int型指针。
int 占4字节,所以
_____a[0]=1_____ _____a[1]=2___
B1 B2 B3 B4 B5 B6 B7 B8
00 00 00 01 00 00 00 02 小端
01 00 00 00 02 00 00 00 大端

(int)a+1
--------*p2-------

*p2=0x00000100(小端模式)
注意在大端模式下存储虽然为0x00000002,但别忘了大端模式是高位数据存放在低地址,所以读出数据后实际*p2=0x20000000。

*p2=0x00000002(大端模式)

十五 数组与指针 推算程序结果

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

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