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

是0x04030201?而不是0x01020304?这个强制转换哪位大神能帮我解释下?3q
最新回答
少女

2024-09-20 02:58:01

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

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

而将这个字的值读出就变成0x04030201
寡走渡人

2024-09-20 04:07:33

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

2024-09-20 03:14:13

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