c***g 发帖数: 472 | 1 #include
#include
main(){
typedef union {
int a;
char b[10];
float c;
}
Union;
Union x,y ={100};
x.a = 50;
strcpy(x.b,"hello");
x.c = 21.50;
printf("Union x: %d %s %f \n",x.a,x.b,x.c);
printf("Union y: %d %s %f \n",y.a,y.b,y.c);
}
为什么我的输出是
Union x: 1101791232 21.500000
Union y: 100 d 0.000000 | j****g 发帖数: 597 | | g*****z 发帖数: 333 | 3 union所有的变量都存在一个地址
y={100}就是int x = 100,char b[0] = 100, float c 的 LSB = 100
所以打印出来x = 100,b = "d\0", c = 1.0 * 2^(100-127) = 0.
000000007450580596923828125。如果你打印精度够的话就可以看到真正的c
同理x的最后赋值才是真正的值,x.c = 21.50,实际的存储是LSB-MSB:0x83,0x58,
0x00,0x00,由于存储的时候MSB在前(由你系统的Endianness决定),所以字符串显
示为空。 |
|