结构体方面的问题?

来源:百度知道 编辑:UC知道 时间:2024/07/02 10:43:52
union myun
{
struct
{
int x,y,z;
}u;
int k;
}a;
main()
{
a.u.x=4;a.u.y=5;a.u.z=6;
a.k=0;
printf("%d\n",a.u.x);
}

以这个题为例,讲一下.

这个是结构体和共用体的嵌套,共用体中套着结构体。

对于a这个共用体变量,它的域要么为a.u要么为.k这两个是不同时存在的,因为他们共用一个存储空间(虽然空间大小不同)。共用体的域是并行的关系。

对于a.u这个结构体来说,它有3个域,分别是a.u.x、 a.u.y和 a.u.z。他们是串行的关系,彼此互不影响。

故这个题目在输出的时候前面虽然给a.u的各个域都给了值,但是后面有给a.k赋值,就会把前面的覆盖掉。最后x的会变成0。

当然因为a的这两个域的大小不同,所以a.k只覆盖了a.u.x,而a.u.y和a.u.z还是有值的,具体你可以画一画这个存储空间的二进制代码就明白了。