联合的问题。

来源:百度知道 编辑:UC知道 时间:2024/06/21 08:58:59
#include <stdio.h>

int main(void)
{
union u_example
{
float decval;
int pnum;
double my_value;
}U1;
U1.my_value = 125.5;
U1.pnum = 10;
U1.decval = 1000.5f;

printf("\ndecval = %f, pnum = %d. my_value = %lf", U1.decval, U1.pnum, U1.my_value);

printf("\nU1 size = %d\ndecval size = %d, pnum size = %d , my_value size = %d", sizeof U1, sizeof U1.decval, sizeof U1.pnum, sizeof U1.my_value);
return 0;
}

/*
C:\Documents and Settings\计算机管理员>c:\c2\lcc\a10.exe

decval = 1000.500000, pnum = 1148854272. my_value = 125.500016
U1 size = 8
decval size = 4, pnum size = 4 , my_value size = 8
C:\Documents and Settings\计算机管理员>

书上说只有最后一个变量是正确的,其他的两个都是错的。。。这个怎么理解??*/

也不是说谁对谁错,只能说只有最后一次发生了赋值操作的那个成员的值是可靠的,因为所有成员共用同一块内存,对任一个成员的修改都可能导致其他成员的值发生变化,所以只有最后一次赋值的那个,才能确定其值