c中的类型转换

tar*_*ish 2 c floating-point int type-conversion

int main()
{
   int x,y;
   int z;
   char s='a';
   x=10;y=4;
   z = x/y;
   printf("%d\n",s); //97
   printf("%f",z); //some odd sequence
   return 0;

}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,由于控件字符串中的int类型,char s在打印时自动转换为int,但在第二种情况下,int to float转换不会发生.为什么这样?

NPE*_*NPE 7

在这两种情况下,第二个参数都被提升为int.这就是可变函数的工作原理,与格式字符串无关.

格式化字符串甚至没有被编译器查看:它只是某个函数的参数.好吧,一个真正有用的编译器可能知道printf()并且可能会查看格式字符串,但只是为了警告您可能犯的错误.事实上,gcc就是这样:

t.c:9: warning: format ‘%f’ expects type ‘double’, but argument 2 has type ‘int’
Run Code Online (Sandbox Code Playgroud)

最终您有责任确保可变参数与格式字符串匹配.由于在第二次printf()调用中它们没有,因此代码的行为是不确定的.