C语言问题

union U
{char st[4];
int i;
long1;};
struct A
{int C;
union U u}a;
问变量a占内存字节数为多少?
随便问下struct与union有什么区别
正确答案是6啊!

#include <stdio.h>
union U
{char st[4];
int i;
long l;};
struct A
{int C;
union U u;}a;

int main(void)
{
printf("%d",sizeof(a));
return 0;
}

8个字节.
现在一般的32位编译器是char 1,int 4,long 4
union U 是4个字节

如果改成char st[5];char st[6];char st[7];char st[8];的话就会是12个字节,因为有内存对齐问题

之所以正确答案是6,因为用的是16位的C语言编译器,比如TC,那里面int是2个字节.long是4个字节,但是在32位的情况下是int是4字节.

还有我没有在TC里测试,可能也存在内存对齐问题.6也不一定是对的,而且和具体的编译器实现都是有关系的,这种题的意义不大,你只要用一下sizeof(a),就可以求出了.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-04-03
8个字节
struct中的多个变量各占用一块内存,互不干涉,union中多个变量共用同一块内存,struct大小等于所有成员占用内存的和,union大小等于成员中占内存最多的成员所占的内存。