鉴于此代码段:
#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
?
鉴于此代码段:
#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
?
c + i
是一个整数表达式(整数提升!),所以sizeof()
返回sizeof(int)
当对它们执行操作时,会提升小于 int 的整数类型。如果原始类型的所有值都可以表示为 int,则将较小类型的值转换为 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
int
如果没有另外指定,C用于所有整数计算。在您的平台上,int
显然是 32 位长,所以sizeof
返回4
. 如果您的编译器将使用 64 位整数,那么它将是8
.