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

时间:2016-02-09 19:49:51

标签: c char sizeof

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

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

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

2 个答案:

答案 0 :(得分:12)

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

不要将%d用于printf sizeof的结果。 sizeof的结果具有size_t类型,而%d需要int参数。因此,要么使用正确的格式说明符

printf("%zu\n", sizeof(a+b));
如果你确定它适合

,或者至少施放论据
printf("%d\n", (int) sizeof(a+b));

答案 1 :(得分:6)

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

尝试

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