char a, b;
printf("%d", sizeof(a+b));
Run Code Online (Sandbox Code Playgroud)
printf写入屏幕的内容是什么?
我认为因为sizeof(char)= 1,sizeof(a + b)也将是1,但结果是4.我不明白这一点,如果我们添加两个字符,为什么写4?
AnT*_*AnT 12
在C语言中,几乎所有算术运算符的操作数都受到称为常规算术转换的隐式转换,或者在这种情况下是整数提升.类型的操作数char被提升为类型int,并且实际添加在域内执行int(或者unsigned int,取决于char该平台上的属性).所以你a + b的实际解释是(int) a + (int) b.结果有类型int,sizeof(int)在您的平台上显然是4.那就是你看到的4.
并且不要使用%d到printf结果sizeof.sizeof有类型的结果size_t,同时%d需要一个int参数.因此,要么使用正确的格式说明符
printf("%zu\n", sizeof(a+b));
Run Code Online (Sandbox Code Playgroud)
或者至少如果你确定它适合的话就抛出论点
printf("%d\n", (int) sizeof(a+b));
Run Code Online (Sandbox Code Playgroud)
这是不一样的sizeof(char),参数(即加法的结果)被提升到int如此sizeof(a + b),其实是等同于sizeof(int).如果你将结果投射到char它将是你所期望的.此外,正确的格式说明sizeof结果是size_t是%zu而非%d.
尝试
printf("%zu", sizeof((char) (a + b)));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
485 次 |
| 最近记录: |