sizeof运算符返回4(char + short)

鉴于此代码段:

#include  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

c + i是一个整数表达式(整数提升!),因此sizeof()返回sizeof(int)

在对它们执行操作时,将提升小于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 

如果没有另外指定,则C使用int进行所有整数计算。 在您的平台上, int显然是32位长,因此sizeof返回4 。 如果你的编译器使用64位整数,它将是8