C中的数据类型混淆

jua*_*nli 5 c type-conversion

以下代码有效:

int main(void)
{  
   float f = get_float();
   int i = round(f*100);
   printf("%i\n", i); 
}
Run Code Online (Sandbox Code Playgroud)

然而,如果以这种方式编码会产生错误:

printf("%i\n", round(1.21*100));
Run Code Online (Sandbox Code Playgroud)

输出说round(1.21*100)float.那么,为什么呢

int i = round(f*100); 
Run Code Online (Sandbox Code Playgroud)

很好吗?

Som*_*ude 16

当你这样做

int i = round(f*100); 
Run Code Online (Sandbox Code Playgroud)

转换double函数的结果round.转换后的结果存储在int变量中i,该变量可以与"%i"期望int参数的格式一起使用.

将直接double结果round作为参数传递给期望int格式和参数类型不匹配的格式时.这导致了不确定的行为.

没有转换在调用作出printf,并没有转换可以进行,因为里面的代码printf功能不知道实际的参数类型.它只知道格式"%i".变量参数函数丢失了所有可能的类型信息.


Dar*_*ati 5

这是因为自动类型转换的行为.在printf中,自动类型转换不起作用.当你说%i时,它只是期望整数,它不能将double转换为整数然后打印.

在赋值操作中,double首先转换为整数,然后将其赋值给=运算符的左操作数.我希望这有帮助.