区别
1.struct 的成员存放在不同地址上,union 所有成员存放在同一个地址空间。
2.struct 的长度是所有成员所占空间之和,union 的长度是其占用空间最大的成员的长度。
引出的几个问题
问题1:union 和 struct 的长度怎么算?
例如,下面应该输出多少?
struct Stu
{
char sex;
int age;
};
printf("sizeof(struct Stu) = %d\n", sizeof(struct Stu));
答案是8。这就涉及到了字节对齐的问题。
问题2:改变 union 的一个成员,是否会影响其他成员的值?
union U_A{
char a;
int b;
}u_c;
u_c.a = 0x01;
u_c.b = 0x0201;
printf("%d %d \n", u_c.b, u_c.a);
程序输出513 1
。可以看出,好像并没有影响(当然,这只是特例)。这就涉及到了C语言的基本类型在内存中究竟是怎么储存的问题。
问题3:什么,你的问题2中的程序运行结果和我的不一样?
这就涉及到了大小端的问题。
问题4:区别1中提到了地址空间,什么是地址空间?
这就涉及到了物理空间以及虚拟空间的问题。