【问题标题】:Trouble understanding the Incrementation [duplicate]无法理解增量[重复]
【发布时间】:2022-01-04 00:47:12
【问题描述】:

有人可以一步一步告诉我这是如何进行的吗?我无法理解 x++ 的工作原理。我知道 x++ 保留原始值然后递增它,但在这种情况下它有什么作用?不应该升两次吗?

int main()
{
    int y, x=3;
    x=x++ +1;
    y=++x;
    printf ("x=%d y=%d",x,y);

    return 0;
}

【问题讨论】:

  • x=x+++1; 这行有未定义的行为。
  • @Nit_esh 您对第一个表达式的推理不适用于 C。请阅读标记的重复项。
  • @Eugene Sh.是的,未定义的行为

标签: c increment


【解决方案1】:

x = x+++1; 行被解析为x = (x++) + 1;。这在理论上意味着“将 x 的当前值加 1,然后将结果分配给 x,然后增加 x”。然而,正如 Eugene Sh.提到,这是 C 中未定义的行为,这意味着依赖此行为的任何代码都不可移植,并且在不同系统上的行为可能不同。

这是一个清晰的例子。 x = y++ 行被解释为x = y; y = y + 1;

int main() {                                                                                         
  int x = 0;                                                                                         
  int y = 0;                                                                                         
  x = y++;                                                                                           
  printf("%d\n%d\n", x, y);                                                                          
                                                                                                     
  return 0;                                                                                          
}   
> 0
> 1

需要明确的是,您的代码未定义的原因是因为 x 被分配给包含 x++ 的表达式。写y = x+++1是完美定义的,相当于

y = x + 1;
x = x + 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-28
    • 2017-12-01
    • 2015-06-26
    • 2014-03-23
    • 2015-12-27
    • 2017-11-23
    • 2023-03-03
    • 2013-01-20
    相关资源
    最近更新 更多