#include<stdio.h>
main()
{
char x ;
x = 'a' ;
printf("%d",x);
}
在此%d格式说明符中,应读取4个字节作为整数格式说明符,但x作为字符仅存储在1个字节中。所以剩下的3个字节应该有垃圾值,输出应该是随机的。
但是输出总是97,这是'a'的ascii值。
有人能告诉我格式说明符是如何工作的吗?
最佳答案
与函数的声明参数类型不匹配的函数参数(即,因为函数允许变量参数,如printf
,或因为没有提供函数原型)将进行默认参数提升(参见C11 6.5.2.2),从而将char
值转换为int
或unsigned int
值。因此,将a
传递到printf
符合%d
的要求。