关于C语言联合体的几点常见问题
1.联合体所占内存大小问题
结论:联合体所占内存大小由以下两个条件决定: 1)大小足够容纳最宽的成员;2)大小能被其包含的所有基本数据类型的大小所整除。
验证:
#include <iostream>
using namespace std;
union U1
{
char s[9];
int n;
double d;
};
union U2
{
char s[5];
int n;
double d;
};
int main(int argc, char *argv[])
{
U1 u1;
U2 u2;
printf("%d\n",sizeof(u1));
printf("%d\n",sizeof(u2));
return 0;
}
输出结果为
16
8
解释:
U1中,s占9字节,n占4字节,d占8字节,因此其至少需9字节的空间。然而其实际大小并不是9,用运算符sizeof测试其大小为16.这是因为这里存在字节对齐的问题,9既不能被4整除,也不能被8整除。因此补充字节到16,这样就符合所有成员的自身对齐了。U2同样的道理。
不要虚度时间

浙公网安备 33010602011771号