这里发生了什么?sizeof(short_int_variable + char_variable)

hem*_*hem 8 c variables sizeof

#include <stdio.h>
 int main()        
{

           short int i = 20;

            char c = 97;

            printf("%d, %d, %d\n", sizeof(i), sizeof(c), sizeof(c + i));
            return 0;
}
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我当sizeof(a + b)"a是短int类型&b是char类型时会发生什么"输出是:2,1,4

unw*_*ind 8

由于C的标准积分推广规则,表达式的类型c + iint,所以这就是为什么你得到相当于sizeof (int).

请注意,这sizeof不是一个函数,只有在命名类型和解决优先级冲突时才需要括号.你的代码应写成:

printf("%zu, %zu, %zu\n", sizeof i, sizeof c, sizeof (c + i));
Run Code Online (Sandbox Code Playgroud)

最后使用sizeof括号因为sizeof绑定比较紧+,所以sizeof c + i将被解析为(sizeof c) + i不是所需的结果.

还要注意,它大部分时间都是编译时构造,表达式实际上从未被计算过.所有这一切都是编译器"假装"来评估它,找出表达式的类型,然后给出该类型值的大小.实际价值永远不需要存在,有时是整洁的.

返回的值的类型sizeofsize_t,使用%zu(它不是int)打印.