c - sizeof 运算符的操作数
问题描述
我理解的结果
int nData = 10;
printf("%d", sizeof(nData + 2.0));
是“8”
为什么每个结果
int nData = 10;
printf("%d", sizeof(nData = 2.0));
printf("%d", sizeof(nData += 2.0));
不是 8 而是 4?为什么nData
不能 be12.0
或12
by sizeof(nData += 2.0)
?
解决方案
因为 2.0 是 type 的常量double
,所以表达式的nData + 2.0
类型double
符合 C 标准第 6.3.1.8 节中指定的“通常的算术转换”:
首先,如果任一操作数的对应实数类型为 long double ,则将另一个操作数转换为对应实数类型为 long double 的类型,而不改变类型域。
否则,如果任一操作数的对应实类型为 double ,则将另一个操作数转换为对应实类型为 double 的类型,而不改变类型域
所以sizeof
评估为 a 的大小double
。
在 and 的情况下nData = 2.0
,nData += 2.0
每个表达式都有类型int
,因为那是赋值左侧的类型。所以sizeof
评估为int
.
此外,运算符的操作数仅在编译时sizeof
对其类型进行评估。这意味着在运行时不会评估任何赋值或增量。因此,在您的第二个示例中,在使用. 在运行时计算操作数的唯一时间是操作数是否为可变长度数组。nData
sizeof
sizeof