【发布时间】:2017-11-18 03:56:40
【问题描述】:
printf function int to %f , float to %d 尝试实验
#include<stdio.h>
int main(){
int i=10;
float x=43.2892f;
printf("i=%f x=%d \n",i,x);
return 0;
}
输出:
i=43.289200 x=10
需要帮助了解为什么这些变量会互换?
【问题讨论】:
-
欢迎来到未定义行为领域。人口:
INT_MAX + 1. -
您可以随心所欲地进行实验,但是您想出的结果完全没有用,因为您看到的是未定义的行为。
-
嗯,它是 UB,但是查看 generated assembly 很明显,浮点数是在浮点寄存器中传递的,而整数是在常规寄存器中传递的,
printf可能会寻找这些寄存器中的变量。 -
@narutowindy 未定义的行为可以做任何事情。它不必是随机的,它可以是一致的。
-
@narutowindy 每次都会产生不同的结果 - 听起来你是在定义行为?
标签: c printf format-specifiers