c语言的问题、结构体与共同体

来源:百度知道 编辑:UC知道 时间:2024/07/04 07:36:47
#include <stdio.h>
union myun
{
struct
{
int x,y,z;
}u;
int k;
}a;
void main()
{ a.u.x=4;a.u.y=5;a.u.z=6;
a.k=0;
printf("%d\n",a.u.x);
}
为什么等于0

你可能对结构体和联合体还没有区分开,结构体为每个成员分配内存空间,而联合体的所有成员共用内存空间(这也是联合体叫作共用体的原因),比如你的联合体a中有两个成员,一个结构体u,一个int k;系统为你的联合体a分配的内存空间是u和k中占用空间较大的一个(也就是u),而你在main中先为u赋值,后又为k赋值,由于a和u共用内存,所以为k赋值也会影响结构体a。如果你把union myun 改为struct myun,语句printf("%d\n",a.u.x)就会输4了。

k和结构体成员u共享同一段内存,所以对k的修改也会体现在u上.

设整型变量占两个字节(TC)
a为联合体变量, 其成员有两个:
....结构体变量u(有三个成员, 整型变量 x,y,z, 占内存6个字节,且由低到高)
....整型变量k, 占2个字节
联合体成员共同占有同一段内存,即 a.k 与 a.u.x 占有同一段内存
当执行 x.k=0, 即相当于 x.u.x=0