扬州维扬实验小学照片:c语言的联合体问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/30 02:16:30
#include <stdio.h>
union myun
{ struct
{intx,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%d%d\n”,a.u.x,a.u.y,a.u.z);}
这个题的答案是什么啊?能稍微详细地讲一下吗,谢谢大家了!

答案应该是0,5,6.
下面是我整理的程序,在VC6.0下面编译通过:
#include <stdio.h>

union myun
{
struct {
int x;
int y;
int z;
}u;
int k;
}a;

int main()
{
a.u.x =4;
a.u.y =5;
a.u.z =6;

a.k = 0;

printf("%d %d %d\n",a.u.x,a.u.y,a.u.z);

return 0;
}

union类型是共享内存的,以size最大的结构作为自己的大小,这样的话,myun这个结构就包含u这个结构体,而大小也等于u这个结构体的大小,在内存中的排列为声明的顺序x,y,z从低到高,然后赋值的时候,在内存中,就是x的位置放置4,y的位置放置5,z的位置放置6,现在对k赋值,对k的赋值因为是union,要共享内存,所以从union的首地址开始放置,首地址开始的位置其实是x的位置,这样原来内存中x的位置就被k所赋的值代替了,就变为0了,这个时候要进行打印,就直接看内存里就行了,x的位置也就是k的位置是0,而y,z的位置的值没有改变,所以应该是0,5,6

是:456

你这个程序就不对哦
好多 错误不过我改了一下就有了结果
是:666

这样会出现几个变量:aux auy auz ak
同时后面又没有出现计算的步骤,所以结果就是赋予变量的原值。456

应该是056吧
解释:
a的类型是myun,在内存中是这样存储的

x y z
k
- - -
a.u.x=4, a.u.y=5, a.u.z=6后
x y z
k
4 5 6

a.k=0后
x y z
k
0 5 6