C - 联合整数成员返回并集中的数据,而浮点显示异常



在下面的代码中,如果我打印工会成员的值,则未分配的成员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

最新更新