gpt4 book ai didi

c - 为什么 sizeof 运算符对某些表达式的工作方式不同?

转载 作者:行者123 更新时间:2023-12-03 23:26:38 25 4
gpt4 key购买 nike

我知道像 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)4sizeof(double)8 ,所以你会看到相应的输出。
    也就是说, sizeof产生 size_t 类型的结果,您必须使用 %zu用于打印结果的格式说明符。

    关于c - 为什么 sizeof 运算符对某些表达式的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63470184/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com