鉴于以下代码片段:

int *iptr;
float *fptr;
float fval;
fval = 0.0;
fptr = &fval;
iptr = fptr;
printf("%d \n", *iptr);
fval = 1.0;
printf("%d \n", *iptr);

输出是:



为什么第一个打印语句至少近似匹配与 *iptr (0.0) 关联的值,而第二个打印语句不匹配?

最佳答案

当您编写 printf("%d \n", *iptr); 时,您要求 printfiptr 指向的值解释为整数。

碰巧 float0 版本由 int0 版本的相同位表示。特别是,这些位都是 0

但是,任意浮点数,例如 1.0 将具有不同的位表示(如 IEEE 标准所定义),这在解释为 int 时毫无意义。

这个 Wikipedia article 解释了如何将浮点数表示为位。

关于c - int * vs float * 类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23007155/

10-13 09:46