鉴于以下代码片段:
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);
时,您要求 printf
将 iptr
指向的值解释为整数。
碰巧 float
的 0
版本由 int
的 0
版本的相同位表示。特别是,这些位都是 0
。
但是,任意浮点数,例如 1.0
将具有不同的位表示(如 IEEE 标准所定义),这在解释为 int
时毫无意义。
这个 Wikipedia article 解释了如何将浮点数表示为位。
关于c - int * vs float * 类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23007155/