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
由于C的标准积分推广规则,表达式的类型c + i是int,所以这就是为什么你得到相当于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不是所需的结果.
还要注意,它大部分时间都是编译时构造,表达式实际上从未被计算过.所有这一切都是编译器"假装"来评估它,找出表达式的类型,然后给出该类型值的大小.实际价值永远不需要存在,有时是整洁的.
返回的值的类型sizeof是size_t,使用%zu(它不是int)打印.