#includestdiohint mainint argc char const argv union short i; char a2; u; ua0 = 0x11; ua1 = 0x22; printf0xxn ui; return 0;ua0=0x11为什么是低字节
在C语言中,联合体(union)的所有成员共享相同的内存空间,所以通过修改其中一个成员的值,会影响到其他成员。
在这个例子中,联合体u有两个成员:一个short类型的整数i和一个char类型的数组a,数组a有两个元素,分别表示低字节和高字节。
在内存中,联合体u的内存布局如下:
-------------------------
| |
| i |
| |
-------------------------
| a[0] |
-------------------------
| a[1] |
-------------------------
由于x86架构是小端字节序(Little Endian),低字节存储在低地址,高字节存储在高地址。所以当我们将0x11赋值给u.a[0]时,它会存储在低地址,即u.i的低字节部分。
所以最后输出的结果是0x2211,因为0x22存储在高字节部分,0x11存储在低字节部分
原文地址: https://www.cveoy.top/t/topic/iBB2 著作权归作者所有。请勿转载和采集!