为什么sizeof(char + char)返回4?

char  a, b;     printf("%d", sizeof(a+b)); 

printf写入屏幕的内容是什么?

我认为因为sizeof(char)= 1,sizeof(a + b)也将是1,但结果是4.我不明白这一点,如果我们添加两个字符,为什么写4?

在C语言中,几乎所有算术运算符的操作数都受到称为常规算术转换的隐式转换,或者在这种情况下是整数提升char类型的操作数被提升为int类型,实际的添加是在int域内执行的(或unsigned int ,具体取决于该平台上char的属性)。 所以你的a + b实际上被解释为(int) a + (int) b 。 结果的类型为intsizeof(int)在您的平台上显然为4。 那是你看到的4。

并且不要使用%dprintf sizeof的结果。 sizeof的结果是size_t类型,而%d需要int参数。 因此,要么使用正确的格式说明符

 printf("%zu\n", sizeof(a+b)); 

或者至少在你确定它适合的情况下抛出论据

 printf("%d\n", (int) sizeof(a+b)); 

这与sizeof(char) ,参数( 即添加的结果 )被提升为int因此sizeof(a + b)实际上等于sizeof(int) 。 如果将结果转换为char那么它将是您所期望的。 此外, sizeof结果的正确格式说明符是%zu而不是%d

尝试

 printf("%zu", sizeof((char) (a + b)));