联盟在C中分配的值

时间:2018-02-10 20:28:28

标签: c unions

给出以下联合定义:

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 ??

1 个答案:

答案 0 :(得分:2)

你得到65,'A'的代码,因为字段ichar字段共享其部分空间。

总的来说,您的程序在本地union中的行为未定义,因为您只写了与int重叠的部分内容后才读取整个char

初始化union可以解决问题。但是,不能保证读取会在低位字节中给出65。此行为是特定于实现的。