在联合体中,所有成员共享同一块内存空间。在这个例子中,联合体u中有两个成员:一个short类型的整数i和一个char类型的数组a[2]。

当我们给数组a赋值时,根据系统的字节序,内存中的存储方式是从低字节到高字节。在这个例子中,我们先给a[0]赋值为0x11,然后给a[1]赋值为0x22。由于数组是从低地址开始存储的,所以0x11会被存储在低地址处,0x22会被存储在高地址处。

当我们访问联合体的i成员时,由于i和a共享同一块内存空间,所以它们的值是相同的。在这个例子中,0x11和0x22分别是i的低字节和高字节。由于系统的字节序可能是小端或大端,所以打印出的结果可能是0x2211或0x1122。

要确定系统的字节序,可以使用sizeof函数来查看联合体的大小。如果sizeof(u)等于2,则系统是小端序;如果sizeof(u)等于4,则系统是大端序。

#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/iBCm 著作权归作者所有。请勿转载和采集!

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