在下面的代码中,如果我打印工会成员的值,则未分配的成员int i;
输出515
.我发现它赋予了整个工会的位置权重。
问:-但是如果声明为 float i;
则输出0.000
。此行为的任何特殊原因。这是如何工作的?
#include<stdio.h>
int main()
{
union a
{
float i;
char ch[2];
};
union a u;
u.ch[0] = 3;
u.ch[1] = 2;
printf("%d, %d, %fn", u.ch[0], u.ch[1], u.i);
return 0;
}
通过使用联合,该程序使两种不同的数据类型(在本例中为 int/float 和 char[](共享相同的内存区域。接下来,程序将内存区域分配为 char,然后将其作为 int/float 读回。仅当写为 char 的值在读回它的数据类型的上下文中"有意义"时,此操作才能成功。正如你所观察到的,对于"int",它可能会返回一些值,因为 C 不会对整数值应用任何特殊编码(但也请参阅二进制补码(。但是,实数通常使用IEEE754标准进行编码,因此,读回的值取决于解码的内容。我认为这可能也依赖于编译器,因为我看到同一代码的"nan"(不是数字(。
#include<stdio.h>
int main()
{
union a
{
float i;
char ch[2];
};
union a u;
float f = 0.0;
u.ch[0] = 3;
u.ch[1] = 2;
printf("%d, %d, %f, %fn", u.ch[0], u.ch[1], u.i, f);
return 0;
}
输出:3, 2, 楠, 0.000000