char表达式的大小

时间:2014-09-01 08:45:26

标签: c sizeof

有人可以说明sizeof(char expression) sizeof(int)的方式吗?

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

程序打印4作为输出。我希望它是sizeof(char),即1

3 个答案:

答案 0 :(得分:17)

整数推广。

当小的整数类型(小于int,例如charshort等)在算术表达式中时,它们会自动提升为int


  

C11§6.3.1.1布尔,字符和整数

     

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

在脚注中:

  

58)仅应用整数提升:作为通常的算术转换,某些参数表达式,一元+-~运算符的操作数的一部分,以及它们各自子条款规定的移位运算符的两个操作数。

答案 1 :(得分:8)

a+bint表达式。 ab将是char个表达式。

在C中使用大多数运算符时,整数类型但比int窄的操作数将提升为int

答案 2 :(得分:2)

根据C标准(6.5.6添加剂操作员):

  

4如果两个操作数都有算术类型,则通常算术   转换是在他们身上进行的。

通常的算术转换包括整数提升(6.3.1.1布尔,字符和整数):

  

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

所以在这个表达式中

a + b

两个操作数都转换为类型int,结果具有int

这种常见类型的操作数