c语言指针,unsigned long *p;unsigned char a[10]={1,2,3,4};p=(unsigned long *)a; 为什么答应出来*p
答案:3 悬赏:30 手机版
解决时间 2021-03-23 17:10
- 提问者网友:太高姿态
- 2021-03-23 08:25
c语言指针,unsigned long *p;unsigned char a[10]={1,2,3,4};p=(unsigned long *)a; 为什么答应出来*p
最佳答案
- 五星知识达人网友:举杯邀酒敬孤独
- 2021-03-23 10:01
楼上的说的有点让一般人看不懂,我来解释一下,这是字节存储顺序问题,一种是从高地址向低地址存储,另一种是从低位到高位;
一个long正好是一个机器字(32位机器,1word=4byte),当存储顺序为从低到高是,数组存储到内存就变成
0x04 0x03 0x02 0x01
而将这个字的值读出就变成0x04030201
一个long正好是一个机器字(32位机器,1word=4byte),当存储顺序为从低到高是,数组存储到内存就变成
0x04 0x03 0x02 0x01
而将这个字的值读出就变成0x04030201
全部回答
- 1楼网友:空山清雨
- 2021-03-23 11:00
这个是计算机大端小端的问题,你的电脑cpu用的是little endian小端,也就是低位在前高位在后,那样1就变做最低位放最后了
- 2楼网友:摆渡翁
- 2021-03-23 10:25
unsigned long变量正常在内存中占用4个Byte,内存中存放时候高位存放在较大的内存地址,低位存放在较小的内存地址。
所以实际在内存中排列的顺序是01 02 03 04, 对应的32bit长度的变量数值就是0x04030201。
所以实际在内存中排列的顺序是01 02 03 04, 对应的32bit长度的变量数值就是0x04030201。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯