这个for循环实际上如何工作?

dda*_*cot 5 c c++

阅读一些主题我发现了这段代码,我想知道它是如何工作的,因为它是真的:

5
2
Run Code Online (Sandbox Code Playgroud)

代码:

static int a = 7;

int test()
{
  return a--;
}

int main()
{
  for(test();test();test())
  {
    cout << test() << "\n";
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Who*_*aig 13

运作顺序如下:

  1. a在启动时全局初始化.到7
  2. 首先命中for循环的初始化,test()递减a到6,然后返回先前的值(7),这将被忽略.
  3. 命中for循环的测试用例,test()递减a到5,然后返回通过非零测试的先前值(6),以便for循环可以继续.
  4. cout声明; test()递减a到4,返回发送到的先前值(5)cout.
  5. 执行for循环的increment语句.test()递减a到3,返回先前的值(4),这将被忽略.
  6. for循环的测试用例被击中.test()递减a到2,返回先前值(3),该值通过非零测试并继续循环.
  7. cout声明; test()递减a到1,返回发送到的先前值(2)cout.
  8. 执行for循环的increment语句.test()递减a到0,返回先前值(1),忽略该值.
  9. for循环的测试用例被击中.test()递减a到-1,返回先前值(0),这会使非零测试失败并且循环终止.

现在.从6或8开始循环,看看会发生什么.= P

  • @ddacot后一元运算符(两者 - 和++)按设计工作.声明`x = a ++`做了两件事.(1)将"a"递增1,并且(2)返回"a"的*prior*值作为表达式值,然后将其赋值给"x".出于某种原因,教师教导这完全错误.他们说"`a`被分配给`x`,然后`a`被递增." 虽然它可能*以这种方式出现,但实际上并非正确的操作顺序. (3认同)

Oli*_*rth 12

for形式的循环:

for (a; b; c) {
    // stuff
}
Run Code Online (Sandbox Code Playgroud)

相当于:

{
    a;
    while (b) {
        // stuff
        c;
    }
}
Run Code Online (Sandbox Code Playgroud)