我知道像 x++
这样的表达或函数调用不会在 sizeof 运算符中进行评估。
当我运行下面的代码时,我得到了 4 8 8
作为输出。
有人可以向我解释第 6、7、8 行实际发生了什么吗?
#include <stdio.h>
int main()
{
int x=10;
double y=10.0;
printf("%d ",sizeof (x=x+y));
printf("%d ",sizeof (y=x+y));
printf("%d ",sizeof (x+y));
return 0;
}
我发现如果表达式包含赋值运算符 =
隐式(如预增量)或显式(如 x=x+y
),则表达式不会在 sizeof
中求值运算符(operator)。我对吗?
最佳答案
sizeof
运算符对参数的数据类型进行操作。在你的代码中
(x=x+y)
产生一个类型 int
, 同 x
(y=x+y)
产生一个类型 double
, 同 y
x+y
产生一个类型 double
,按照通常的算术转换规则。 尺寸是基于此计算的。
在您的平台中,很可能是
sizeof(int)
是 4
和 sizeof(double)
是 8
,所以你会看到相应的输出。也就是说,
sizeof
产生 size_t
类型的结果,您必须使用 %zu
用于打印结果的格式说明符。
关于c - 为什么 sizeof 运算符对某些表达式的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63470184/