关于联合体的问题、、、?

来源:百度知道 编辑:UC知道 时间:2024/06/24 23:54:22
#include "stdio.h"
main(){
union{
int a;
float b;
char c;
}x;
x.a=10;
x.b=65.223;
x.c='b';
printf("%d\n%.2f\n%c\n",x.a,x.b,x.c);
}

X.A输出的结果为什么不一样????

因为union里的三个变量共用一块内存,内存的大小为这三个变量类型所占的最大值,因此这里x的大小即sizeof(float),后面的对b、c的赋值实际上覆盖了原有的a的赋值,因为char只占了1位,而float、int占4位(在我的电脑上),所以a的值完全被更改,b的值在内存里只改了最后一位,考虑到浮点数的存储和显示方式没有显现出来,所以b的值看上去不变而已,c的值正好是最后赋给它的值。如果你把那三个赋值语句随意更改顺序,结果都是不一样的~