#include<stdio.h>
int main() {
short int i=20;
char c=97;
printf("%d,%d,%d",sizeof(i),sizeof(c),sizeof(c+i));
return 0;
}
假设给定short int = 2的大小,char为1且int为4B 好吧如果我在机器上运行它会给出2,1,4 但是ans 2,1,2
答案 0 :(得分:5)
对于初学者来说,这个电话
printf("%d,%d,%d",sizeof(i),sizeof(c),sizeof(c+i));
具有未定义的行为,因为使用了不正确的格式说明符。
应该看起来像
printf("%zu,%zu,%zu",sizeof(i),sizeof(c),sizeof(c+i));
因为sizeof
运算符评估的值类型为size_t
。
由于整数促销(作为通常的算术转换的一部分),表达式c + i
的类型为int
。
从C标准(6.3.1算术操作数)
- ...如果int可以表示原始类型的所有值(作为限制 按宽度,对于位字段),该值将转换为 一个int;否则,它将转换为unsigned int。 这些是 称为整数提升 .58)所有其他类型均未更改 整数促销。
醇>
和(6.5.6加法运算符)
4如果两个操作数都有算术类型,则通常算术 转换是在他们身上进行的。
因此,如果int
类型的对象的大小等于4
,则表达式sizeof(c+i)
会产生4
。