2

私は C を学んでいます。静的変数が を超えて増加しないのはなぜですか1

#include <stdio.h>

int foo()
{
  static int a = 0;
  return a+1; 
}

int main()
{
  int i;
  for (i = 0; i < 10; i = foo())
    printf("%d\n", i);
  return 0;
}

このコードのどこが間違っていますか?

4

4 に答える 4

5

何も保存していないからです。これはあなたのために働くはずです:

int foo()
{
  static int a = 0;
  return ++a; 
}

ここでreturn ++aは を意味a = a + 1します。つまり、最初に a をインクリメントしてから、その値を返します。a+1に評価され1ますが、何も格納されませんa

于 2013-10-08T11:29:43.650 に答える
0

a+1 を返すので、これは無限ループです。毎回 0+1 が返され、a の値が更新されません。ループの条件に従って、ループはタイムアウトが発生するまで無限に実行されます。ここでこれを試してください a の値は、すべての関数呼び出しで更新され続けます。

int foo()
{
    static int a = 0;
    a++;
    return a;
}
于 2013-10-08T11:58:55.987 に答える
0

「a」変数に値を割り当てることはありません。ルーチンから a+1 の値を返すだけです。

于 2013-10-08T11:29:29.697 に答える