鉴于此代码段:
#include <stdio.h>
int main() {
short i = 20;
char c = 97;
printf("%d, %d, %d\n", sizeof(i), sizeof(c), sizeof(c + i));
return 0;
}
为什么sizeof(c + i) == 4
?
答案 0 :(得分:17)
c + i
是整数表达式(整数提升!),因此sizeof()
返回sizeof(int)
答案 1 :(得分:4)
操作时会提升小于int的整数类型 在他们身上表演。如果原始类型的所有值都可以 表示为int,较小类型的值转换为 一个int;否则,它将转换为unsigned int。
整数促销需要将每个变量(c和i)提升为int大小。
short i = 20;
char c = 97;
//The two int values are added and the sum is truncated to fit into the char type.
char a = c + i;
printf("%d, %d, %d %d\n", sizeof(i), sizeof(c), sizeof(c + i),sizeof(a));
2, 1, 4 1
答案 2 :(得分:3)
如果没有另外指定,则C使用int
进行所有整数计算。在您的平台上,int
显然是32位长,因此sizeof
会返回4
。如果您的编译器使用64位整数,那么它将是8
。