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ループのイニシャライザーが最初にヒットし、6にtest()デクリメントaしてから、前の値(7)を返しますが、これは無視されます。
  3. forループのテストケースがヒットし、5にtest()デクリメントaしてから、ゼロ以外のテストに合格した前の値(6)を返し、forループを続行できるようにします。
  4. ステートメントcout; test()4にデクリメントし、に送信される前の値(5)aを返します。cout
  5. forループのインクリメントステートメントが実行されます。test()3にデクリメントaし、前の値(4)を返します。これは無視されます。
  6. forループのテストケースがヒットしました。test()2にデクリメントaし、前の値(3)を返します。これは、ゼロ以外のテストに合格し、ループが続行されます。
  7. ステートメントcout; test()1にデクリメントし、に送信される前の値(2)aを返します。cout
  8. forループのインクリメントステートメントが実行されます。test()0にデクリメントaし、前の値(1)を返しますが、これは無視されます。
  9. forループのテストケースがヒットしました。test()-1にデクリメントaし、前の値(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 に答える