给出以下联合定义:
typedef union{
int i;
char ch;
float f;}record;
record a;
//a.i = 10;
a.ch = 'A';
//a.f = 10.56;
printf("printing a.i: %p \n", a.i);
printf("printing a.ch: %c \n", a.ch);
printf("printing a.f: %f \n", a.f);
return 0;
我得到以下输出:
打印a.i:65
打印a.ch:A
打印a.f:0.000000
为什么a.i不打印0(未定义整数的默认值),而是' A'的ASCII值。这是不是以某种方式可以访问a.ch ??
答案 0 :(得分:2)
你得到65,'A'
的代码,因为字段i
与char
字段共享其部分空间。
总的来说,您的程序在本地union
中的行为未定义,因为您只写了与int
重叠的部分内容后才读取整个char
。
初始化union
可以解决问题。但是,不能保证读取会在低位字节中给出65。此行为是特定于实现的。