#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值转换为intunsigned int值。因此,将a传递到printf符合%d的要求。

08-16 21:06