有人可以说明sizeof(char expression)
sizeof(int)
的方式吗?
int main()
{
char a, b;
printf("%d\n", sizeof(a+b));
return 0;
}
程序打印4
作为输出。我希望它是sizeof(char)
,即1
答案 0 :(得分:17)
整数推广。
当小的整数类型(小于int
,例如char
,short
等)在算术表达式中时,它们会自动提升为int
。
C11§6.3.1.1布尔,字符和整数
如果
int
可以表示原始类型的所有值(受宽度限制,对于位字段),则该值将转换为int
;否则,它将转换为unsigned int
。这些被称为整数促销。 58)
在脚注中:
58)仅应用整数提升:作为通常的算术转换,某些参数表达式,一元
+
,-
和~
运算符的操作数的一部分,以及它们各自子条款规定的移位运算符的两个操作数。
答案 1 :(得分:8)
a+b
是int
表达式。 a
和b
将是char
个表达式。
在C中使用大多数运算符时,整数类型但比int
窄的操作数将提升为int
。
答案 2 :(得分:2)
根据C标准(6.5.6添加剂操作员):
4如果两个操作数都有算术类型,则通常算术 转换是在他们身上进行的。
通常的算术转换包括整数提升(6.3.1.1布尔,字符和整数):
如果int可以表示原始类型的所有值(作为限制 按宽度,对于位字段),将值转换为int ; 否则,它将转换为unsigned int。这些被称为 整数促销
所以在这个表达式中
a + b
两个操作数都转换为类型int
,结果具有int