Hil*_*ter 8 c printf byte casting
为什么以下电话:
printf("%d %d", 'a', 'b');
Run Code Online (Sandbox Code Playgroud)
导致"正确" 97 98值?%d表示函数必须读取4个字节的数据,而printf不能告诉接收到的参数的类型(格式字符串除外),为什么不打印数字|a||b||junk||junk|?
提前致谢.
Jer*_*fin 15
在这种情况下,接收的参数printf将是类型int.
首先,你传递给printf的任何东西(第一个参数除外)都会经历"默认促销",这意味着(除其他外)char并且在传递之前都被short提升int.所以,即使你传递的内容真的有char类型,到printf它时它也会有类型int.在你的情况下,你正在使用一个已经有类型的字符文字int.
scanf和其他采用可变参数的函数也是如此.
其次,即使没有默认促销,C中的字符文字int仍然具有类型(§6.4.4.4/ 10):
整数字符常量的类型为int.
因此,在这种情况下,值以类型开头int,并且不会被提升 - 但即使您以chars 开头,例如:
char a = 'a';
printf("%d", a);
Run Code Online (Sandbox Code Playgroud)
... printf接收的类型int,而不是类型char.