onload
我认为我至少会收到警告,我正在尝试打印<body>
,但变量为int main(){
char a = 65;
a=a+5;
printf("%d\n",a);
}
为什么用这种方式打印没有问题?
答案 0 :(得分:2)
出于历史原因,字符大都是小整数,并且所有整数算术都以int
类型或更广泛的类型进行。软件有时必须将字符用作整数代码,有时还要将其作为要打印的东西使用,因此使用char
类型开发的C语言很灵活。
无论在表达式中使用int
还是unsigned int
,包括函数参数,都可以使用char
。
如果我们重新设计语言,则可能会将char
的字符与char
的整数区别开来,并需要进行显式转换才能在它们之间进行转换。但是,语言就是它。
答案 1 :(得分:2)
我认为我至少会收到警告,我正在尝试打印
%d
,但变量为char
“没有问题”,因为"%d"
期望int
,并且a
在传递给int
时被转换为printf()
。 @Weather Vane
默认参数 促销
因为a
作为printf(const char *, ...)
参数传递给...
:
函数原型声明器中的省略号引起参数类型转换在最后声明的参数之后停止。默认参数提升是对尾随参数执行的。 C11dr§6.5.2.27
默认参数
char
的促销会将其转换为int
1 。
1 或unsigned
时为CHAR_MAX > INT_MAX
。
(例如:char, int
具有相同的位宽和符号度的特殊平台。)