C语言中这样输出的是什么?printf("%d","Happy");

为什么将%d改为%u和%x不会报错但是改成%f就会报错?
2025-04-14 18:56:17
推荐回答(2个)
回答1:

首先要明确,并非所有平台下都会报错。

下面,罗列一些C语言中得事实:

  1. %d %u %x 要求对应参数列表中的一个整数(这里说的整数是指在内存中以二进制补码存储的整数),他们的区别只是在显示时的样式(进制)不同。

  2. %f 要求对应一个浮点数

  3. "Happy"作为实参时,传递的是一个指针

  4. 指针是一个整数

  5. 某些编译器会对printf做类型对应检查(比如VS、LLVM)


你可以试试在gcc下就不会报错,但换成llvm就会报错了。

回答2:

printf("%d","Happy");
得到的数字 是“happy”的首地址,十进制,unsigned类型,十六进制的数据都可以读取地址,地址的值只能是整数,所以float类型不可以读取地址。整数和浮点数的储存方式不同,所以会报错。可以参考一下浮点数的储存方式。