如何解决为什么结果如此奇怪
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
是可变参数,预期的类型是由格式字符串决定的,而不是参数类型,所以编译器一般无法知道生成类型转换。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。