【发布时间】:2014-08-18 09:12:19
【问题描述】:
这是我的代码,我不知道为什么会这样:
#include <stdio.h>
void foo(float *);
int main()
{
int i = 10, *p = &i;
foo(&i);
}
void foo(float *p)
{
printf("%f\n", *p);
}
输出:
0
【问题讨论】:
-
您正在尝试将
int*转换为float*。你的编译器应该会出错(至少在标准 C++ 中)。 -
因为您忽略了告诉您
int*不是float*的编译器警告 -
您的程序打印 0。与下面告诉您程序错误原因的所有答案相反,您的程序可能正在运行。也就是说,就像您以较少争议的方式完成类型双关一样工作。问题是,您期望什么以及是什么让您认为“0”不是通过
%f对与10具有相同位的浮点数的正确转换?
标签: c++ c floating-point int format-specifiers