【发布时间】:2021-01-29 03:06:36
【问题描述】:
我正在测试是否可以在同一个数组中包含 int 和 float 值,我编写了以下代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int v[4]={0,0,0,0};
*((float*)(&v[1]))=45.6;
printf("%f\n",*((float*)(&v[1])));
printf("%f\n",v[1]);
return 0;
}
我期望有 45.599998 和 0 或在两个 printf 上具有相同的值,但我得到不同的结果: 45.599998 45.599983 为什么?,发生了什么?
编辑
顺便说一句,我想强调一下,对于这个问题,我对替代方案不感兴趣,我更感兴趣的是理解为什么不起作用。
【问题讨论】:
-
代码有两种不同类型的未定义行为。因此,尝试理解或预测输出是没有意义的。里面可以是任何东西。使用
-Wall -Wextra -Werror编译至少会迫使您修复其中一个错误。 -
我在我的回答下将您评论的部分内容添加到您的原始帖子中,因为我认为让其他人知道您真正想要学习的内容非常相关。