5

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

5
2

编码:

static int a = 7;

int test()
{
  return a--;
}

int main()
{
  for(test();test();test())
  {
    cout << test() << "\n";
  }
  return 0;
}
4

2 回答 2

13

操作顺序,如图所示:

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

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

于 2013-01-06T12:31:41.200 回答
12

形式的for循环:

for (a; b; c) {
    // stuff
}

相当于:

{
    a;
    while (b) {
        // stuff
        c;
    }
}
于 2013-01-06T12:22:56.883 回答