为什么 sizeof(char + char) return 4?

Why does sizeof(char + char) return 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。结果的类型为 int 并且 sizeof(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 结果的正确格式说明符 size_t%zu 而不是 %d.

尝试

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