在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存储在低字节部分

#includestdiohint mainint argc char const argv	union		short i;		char a2;	u;	ua0 = 0x11;	ua1 = 0x22;	printf0xxn ui;	return 0;ua0=0x11为什么是低字节

原文地址: https://www.cveoy.top/t/topic/iBB2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录