【问题标题】:post increment and pre increment operator [duplicate]后增量和前增量运算符[重复]
【发布时间】:2016-02-02 22:25:58
【问题描述】:

请解释一下这段代码的结果。

//编码一个 当我在笔记本电脑上运行此代码时,y 的值为 4。我认为,y 的逻辑值应该是 5,因为通过执行 x++ 它应该返回 2 而不会增加,因为它是后增量,然后当我们添加 x 现在包含一个递增的值,即 3。所以 2+3 是 5,据我说。但根据我的 turbo c++ 3.0 答案是 4。

#include <stdio.h>
void main() {
  int x = 2,y;
  **int y = x++ + x;**         // ans 4
  printf("y is :%d", y);
}

// 代码 B 当我运行这段代码时,答案是 6。这里 ++x 中的 turbo c++ 3.0 获取了一个递增的 x++ 值,这与上面提到的代码相反。从逻辑上讲,这里的答案是正确的,但在上面的代码中却不是。

#include <stdio.h>
void main() {
  int x = 2,y;
  **int y = x++ + ++x;**       //and 6
  printf("y is :%d", y);
}

【问题讨论】:

  • 你运行它并发现了吗?你是用调试器运行的吗?什么让你感到困惑?
  • 老师布置这个练习的重点是让你通过学习运算符顺序和优先级的规则自己弄清楚。让我们向您解释它会破坏目的。
  • @M.M:关闭原因包含问题中缺少的其他条件。
  • 我发布了一个带有详细解释的新代码。请告诉我两者的区别。谢谢大家。我希望这段代码能帮助你们理解我真正想要的是什么。

标签: c increment operator-precedence post-increment pre-increment


【解决方案1】:

首先,赋值运算符=从右到左工作,这意味着如果您编写x = 2 + 4 + 1;,您的编译器将从最右边的数字1开始读取它,然后将4添加到它等等然后将该值分配给x

所以,在你的case语句y = x++ + x;编译器从右边开始看到它,它首先看到x,即2,然后看到x++,也就是2,因为它是后增量运算符最后它添加他们并将y 分配为2 + 24

在第二种情况下,即y = x++ + ++x;,编译器首先查看++x,并且由于它是预递增运算符,它会将x 增加一个,即x 现在是3。之后看到x++,如上所述,因为它是后运算符,在此操作中将被视为x,并且该值是3(请记住我们之前将x增加了1),因此,编译器分配3 + 36y

【讨论】:

    【解决方案2】:
    1. 结果为 4 的第一个程序

      #include <stdio.h>
      
      void main()   {
       int x = 2,y;
       **int y = x++ + x;         // x=2, so y=2+2=4
       printf("y is :%d", y); // after post increment x=3
      }
      

    由于一个变量只有在语句执行完成后才获取它的增量值,所以 y=2+2

    1. 结果为 6 的第二个程序。

      ++运算符的结合性是“从右到左”

      void main()   {
         int x = 2,y;
         **int y = x++ + ++x;   //Since associativity is left to right so y=3+3=6
         printf("y is :%d", y);// after the post increment x=4
      }
      

    这里先执行预增量,因为由于关联性规则所以 y=3+3

    【讨论】:

      猜你喜欢
      • 2012-10-17
      • 2014-12-09
      • 2023-03-26
      • 2012-11-23
      • 1970-01-01
      • 2010-10-14
      • 2011-03-12
      • 1970-01-01
      相关资源
      最近更新 更多