char a, b;
printf("%d", sizeof(a+b));
printf写入屏幕的内容是什么?
我认为因为sizeof(char)= 1,sizeof(a + b)也将是1,但结果是4.我不明白这一点,为什么它写4如果我们是添加两个字符?
答案 0 :(得分:12)
在C语言中,几乎所有算术运算符的操作数都受到称为通常算术转换的隐式转换,或者在这种情况下,整数提升。类型为char
的操作数会提升为int
类型,实际添加会在int
(或unsigned int
的域内执行,具体取决于char
的属性在那个平台上)。因此,您的a + b
实际上被解释为(int) a + (int) b
。结果类型为int
,sizeof(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)));