【发布时间】:2016-04-05 08:44:14
【问题描述】:
int x; float *p;
p = (float*)&x;
*p = 2.35;
printf("x:%f\n",x); //0.0000
printf("x:%d\n",x); //1075209830
printf("p:%f\n",*p); //2.350000
这是属于 c 未定义行为的东西吗?
【问题讨论】:
-
是的,它是 UB。你期待什么输出?
-
是的,有两个原因:1) 你违反了严格的别名规则 2) 你为
int使用了错误的格式说明符%f。 -
我假设只有第一个 printf 需要解释,但这完全取决于参数如何传递给函数,这取决于编译器模式和版本。可能值得注意的是,vs2015 甚至会产生使用错误输入参数的警告。
标签: c pointers floating-point