#include <stdio.h>
typedef union X {
int x;
char y[4];
}X;
int main() {
X a;
a.x = 0x11223344;
printf("0x%x 0x%x 0x%x 0x%x\n",
a.y[0], a.y[1], a.y[2], a.y[3]);
return 0;
}
一个很有意思的低字节序的问题,在一个联合体中,元素是共用同一个内存空间的。这段代码中x和y[4]的内存大小一样,所以在内存中的起始地址是相同的。
而x86机器的数据存储遵循低字节序原则,所以a.x在内存中的分布依次是0x11, 0x22, 0x33, 0x44,程序的输出为:0x44 0x33 0x22 0x11。
附:
数组的地址是连续的,在已知数组起始地址和大小的情况下,数组可以直接按(地址±n)直接访问当前地址的后第n个数或前n个数。