就printf
函数而言,我从以下几篇参考文献和实验中了解到以下内容。
%c
来打印等价于整数值的字符。也可以使用%d
来打印字符的ASCII值(整数表示)。 同样,scanf
的行为是什么,如果格式说明符的不匹配以及传递给scanf的争论。标准是否定义了它?
答案 0 :(得分:4)
可变参数(与省略号匹配的参数...
)是默认提升。这意味着所有较短的整数类型都会提升为int
(或根据需要无符号)。整数和字符之间没有区别(I believe)。 %d
中%c
和printf
之间的差异仅仅是格式化的值。
scanf
是一种不同的鱼。您传递的所有参数都是指针。指针之间没有默认促销,并且传递与指针类型匹配的确切格式说明符至关重要。
在任何一种情况下,如果您的格式说明符与提供的参数不匹配(例如,将int *
传递给%p
中的printf
),则结果为未定义的行为,这远比“不可预测”更糟糕 - 这意味着你的程序根本就是格式错误。