#include <stdio.h>
union p{
int x;
float y;
};
int main()
{
union p p;
p.x = 10;
printf("%f\n", p.y);
return 0;
}
0.000000
当我尝试编译上面的程序,它没有显示任何警告, 即使在主功能。为什么printf
不是打印值10.00000
?
我已经阅读计算器这也解释了在打印过程中没有使用float符类型转换整数printf
行为的一些相关的问题,但我在这里想这是一个不同的情况。我正在用float说明符打印浮点数。它应该打印适当的值。任何人都可以解释这里发生了什么?
由于int和float的内存表示方式不同(请查看调试器,您会看到)。此外写p.x和访问p.y是未定义的行为... – 2014-10-03 14:31:47
@AdrianoRepetti; “访问p.y是未定义的行为”:否。不是这种情况。 – haccks 2014-10-03 14:32:32
@haccks AFAIK这不是如果'int'和'float'具有相同的大小(实际上如果它们是_compatible types_)但它不是必需的(它们在这里并不知道,因为它取决于环境)。如果我没有错... – 2014-10-03 14:35:11