#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)
这段代码的输出是
2, 1, 4
Run Code Online (Sandbox Code Playgroud)
根据我应该是
2, 1, 2
Run Code Online (Sandbox Code Playgroud)
因为char + short int是short int和大小的short int是2.
根据C标准积分推广规则,表达式的类型c + i将是int,这就是为什么你得到相当于sizeof (int),即4.
当在某些类型的表达式中使用不同的算术类型作为操作数时,将应用称为通常算术转换的标准转换.根据算术类型的等级应用这些转换:具有较低等级类型的操作数被转换为具有较高等级的操作数的类型.这称为积分或浮点促销.

除此之外,根据这里,算术运算符不接受小于int参数的类型,并且自动应用整体促销.所以你会得到4平衡sizeof(c+c).
您可以从本国际标准 - 编程语言 - C,第6.3.1.1节,第2条中找到以下信息:
[...]如果intcan表示原始类型的所有值(受宽度限制,对于位域),该值将转换为int; 否则,它将转换为unsigned int.这些被称为整数促销.整数提升仅适用于:通常算术转换的一部分,某些参数表达式,一元+, - 和〜运算符的操作数,以及移位运算符的两个操作数,如各自的子条款所指定. )[...]
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |