我明白
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.0
来12
或sizeof(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.0
和nData += 2.0
的情况下,每个表达式都有类型int
,因为这是赋值左侧的类型。因此,sizeof
的值等于int
的大小。
此外,sizeof
运算符的操作数只在编译时计算其类型。这意味着在运行时不计算任何赋值或增量。所以在第二个例子中,nData
在使用sizeof
的两行之后仍然有值10。在运行时计算sizeof
的操作数的唯一时间是操作数是否为可变长度数组。