关于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同样的道理。

posted @ 2014-09-17 15:04  zane.shindow.wen  阅读(264)  评论(0)    收藏  举报