我明白

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不能由12.012sizeof(nData += 2.0)

最佳答案

由于2.0是double类型的常数,因此根据C标准第6.3.1.8节中规定的“常用算术转换”,表达式nData + 2.0具有double类型:
首先,如果两个操作数对应的实数类型都是long double
,另一个操作数将在不更改类型domain的情况下转换为相应实数类型为long double的类型。
否则,如果两个操作数对应的实数类型
如果是double,则另一个操作数将在不更改类型domain的情况下转换为相应实数类型为
双重的
因此sizeof的值等于adouble的大小。
nData = 2.0nData += 2.0的情况下,每个表达式都有类型int,因为这是赋值左侧的类型。因此,sizeof的值等于int的大小。
此外,sizeof运算符的操作数只在编译时计算其类型。这意味着在运行时不计算任何赋值或增量。所以在第二个例子中,nData在使用sizeof的两行之后仍然有值10。在运行时计算sizeof的操作数的唯一时间是操作数是否为可变长度数组。

09-27 06:56