【问题标题】:simple c++ loop prefix postfix operator简单的 C++ 循环前缀后缀运算符
【发布时间】:2013-12-06 18:08:46
【问题描述】:
#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    int j = 5;
    while ( ++j < 9)
        cout << j++ << endl;
    cin.get();
    return 0;
}

所以我正在写一本书,我了解这些东西是如何工作的,但我正在寻求更具体的解释,说明为什么会打印 6 和 8。请帮助我。

谢谢

【问题讨论】:

  • 前置增量和后置增量...不太复杂。

标签: c++ loops post-increment pre-increment


【解决方案1】:

++j 表示 j 加一,然后计算 j。 另一方面,j++ 表示先计算 j,然后将其增加 1。

【讨论】:

    【解决方案2】:

    要了解它的输出,您需要单步执行代码:

    j = 5
    j = j + 1 // 6
    j < 9 ? yes
    output j // 6
    j = j + 1 // 7
    go to start of loop
    j = j + 1 // 8
    j < 9 ? yes
    output j // 8
    j = j + 1 // 9
    go to start of loop
    j = j + 1 // 10
    j < 10 ? no
    

    【讨论】:

      【解决方案3】:

      给定:

      int j = 5;
      while ( ++j < 9)
          cout << j++ << endl;
      

      为什么只打印68

      进入循环后,j 为 5。然后 while (++j ... 将其增加到 6。然后 cout 执行,打印出 6。然后发生 j++ 的副作用,将其增加到7.

      在循环的下一次迭代中,++j 再次增加它,得到8,然后打印出来。然后出现j++ 的副作用,将j 递增到9。

      然后当while (++j &lt; 9)再次执行时,j已经递增到10,所以while循环退出,不再打印。

      【讨论】:

        【解决方案4】:

        ++j表示j的值加1然后用在它出现的表达式中

        j++ 表示在表达式中使用j的(current)值,之后 j递增

        【讨论】:

          【解决方案5】:

          j 从 5 开始。然后递增到 6,然后与 ++j &lt; 9 中的 9 进行比较。这通过了条件,所以我们转到下一行,它输出 6,然后将 j 递增到 7。我们回到条件,j 递增到 8,仍然小于 9,然后输出,然后j 递增到9,条件不成立,程序结束。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-01-05
            • 2011-03-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-24
            相关资源
            最近更新 更多