为什么结果如此奇怪

问题描述

int main( )
{
   int x = 5;
   float y = 3.1f;
   printf("int x=%d,float x=%f,y=%f,y=%d\n",x,y,y);  //X86
   return 0;
}

我认为答案是 5 、 5.0 、 3.1 、 3。 但答案是 enter image description here

为什么?

解决方法

%d 格式说明符需要一个 int 类型的参数,而 %f 需要一个 double 类型的参数(可能从 float 提升)。如果传递错误类型的参数,则行为未定义。

解决方案:不要那样做。

(最可能的行为是包含 int 值的内存或寄存器将显示为好像它是 double 类型,但任何事情都可能发生。)

对于大多数函数调用,将 int 传递给需要 double 参数的函数会导致值被转换,因此 42 变为 42.0。但是由于 printf可变参数,预期的类型是由格式字符串决定的,而不是参数类型,所以编译器一般无法知道生成类型转换。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...