c语言指针,unsigned long *p;unsigned char a[10]={1,2,3,4};p=(unsigned long *)a; 为什么答应

是0x04030201?而不是0x01020304?这个强制转换哪位大神能帮我解释下?3q
最新回答
风向决定发型

2024-09-20 06:55:32

楼上的说的有点让一般人看不懂,我来解释一下,这是字节存储顺序问题,一种是从高地址向低地址存储,另一种是从低位到高位;

一个long正好是一个机器字(32位机器,1word=4byte),当存储顺序为从低到高是,数组存储到内存就变成
0x04 0x03 0x02 0x01

而将这个字的值读出就变成0x04030201
小卟忍则乱我心

2024-09-20 09:13:44

unsigned long变量正常在内存中占用4个Byte,内存中存放时候高位存放在较大的内存地址,低位存放在较小的内存地址。
所以实际在内存中排列的顺序是01 02 03 04, 对应的32bit长度的变量数值就是0x04030201。
爱哭的小鬼

2024-09-20 10:34:32

这个是计算机大端小端的问题,你的电脑cpu用的是little endian小端,也就是低位在前高位在后,那样1就变做最低位放最后了