【发布时间】:2019-08-27 17:53:49
【问题描述】:
#include <stdio.h>
union p{
int x;
char y;
};
int main(){
union p a;
a.y = 60;
a.x = 12;
printf("%f ",a.y);
printf("%d ",a.y);
printf("%d",a.x);
}
在上面的输出中是 0.000000 和 12 和 12 但我认为它必须是 12 和 12 和 12 有人可以解释一下。
【问题讨论】:
-
您为什么希望
%f打印任何合理的东西?它与联合中的任何一种类型都不匹配,并且无论如何,没有任何机制可以执行必要的转换。 -
a.y = 60; a.x = 12;是矛盾的。在union中不能两者兼有。union不是struct。 -
另外,当您将 12 放入
.x并从.y中提取一个字符值时,也不能保证为 12(也就是说,即使您使用 @987654331 打印它也不能保证@,它甚至不能保证是 char 值 12)。 -
.. 仅当 little-endian 时。
标签: c