为什么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
。 结果的类型为int
而sizeof(int)
在您的平台上显然为4。 那是你看到的4。
并且不要使用%d
来printf
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)));