首先要明确,并非所有平台下都会报错。
下面,罗列一些C语言中得事实:
%d %u %x 要求对应参数列表中的一个整数(这里说的整数是指在内存中以二进制补码存储的整数),他们的区别只是在显示时的样式(进制)不同。
%f 要求对应一个浮点数
"Happy"作为实参时,传递的是一个指针
指针是一个整数
某些编译器会对printf做类型对应检查(比如VS、LLVM)
你可以试试在gcc下就不会报错,但换成llvm就会报错了。
printf("%d","Happy");
得到的数字 是“happy”的首地址,十进制,unsigned类型,十六进制的数据都可以读取地址,地址的值只能是整数,所以float类型不可以读取地址。整数和浮点数的储存方式不同,所以会报错。可以参考一下浮点数的储存方式。