char表达式的大小

Nan*_*dyy 11 c sizeof

有人可以说明sizeof(char expression)会怎样sizeof(int)

int main()
{
char a, b;
printf("%d\n", sizeof(a+b));
return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序打印4为输出.我期待它是,sizeof(char)1

Yu *_*Hao 17

整数推广.

当小整型(小于int,例如char,short等)是在算术表达式,它们会自动提升到int.


C11§6.3.1.1布尔,字符和整数

如果a int可以表示原始类型的所有值(由宽度限制,对于位字段),则该值将转换为int; 否则,它被转换为unsigned int.这些被称为整数促销.58)

并在脚注中:

58)的整数优惠只应用:如通常的算术转换的一部分,某些参数表达式,以一元的操作数+,-以及~运营商和所述移位运算符的两个操作数,如由它们各自的小节中规定.


M.M*_*M.M 8

a+b是一种int表达.a而且bchar表达.

当在C中使用大多数运算符时,整数类型的操作数会比int提升的更窄int.