考虑以下代码片段:
#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;
}
Why is 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;
}
Why is sizeof(c + i) == 4
?
c + i
是一个整型表达式(整型提升!),因此sizeof()
返回sizeof(int)
比 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
C语言在所有整数计算中默认使用int
类型,除非另有规定。在您的平台上,int
显然是32位长的,因此sizeof
返回4
。如果您的编译器使用64位整数,则会返回8
。
sizeof
不是一个函数,而是一个运算符。 - milleniumbugsizeof()
是编译时运算符,表达式的类型在编译时已知,在C语言中的算术类型操作需要将两个操作数转换为一个公共类型--称为整数提升。 - Grijesh Chauhansizeof
在编译时进行操作,除了VLA的情况外。 - phoxis