7

鉴于此代码段:

    #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

4

3 回答 3

17

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

于 2013-07-19T10:08:31.553 回答
4

当对它们执行操作时,会提升小于 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
于 2013-07-19T10:20:45.253 回答
3

int如果没有另外指定,C用于所有整数计算。在您的平台上,int显然是 32 位长,所以sizeof返回4. 如果您的编译器将使用 64 位整数,那么它将是8.

于 2013-07-19T10:10:27.963 回答