-2
#include <stdio.h>

void foo()
{
  int a = 10;
  static int sa = 10;

  a += 5;
  sa += 5;

  printf("a = %d, sa = %d\n", a, sa);
}


int main()
{
  int i;

  for (i = 0; i < 10; ++i) {
    foo();
  }
}

「関数内の静的変数は呼び出し間で値を保持する」ことを理解しています。「sa=10」の値を後でリセットしたい場合、どうすればこれを達成できますか?

4

1 に答える 1

1

現在、 が呼び出されるたびfoo()に、両方の変数が だけインクリメントされ5ます。ただしsa、関数呼び出し間で値を保持します。

i | a  | sa
0 | 15 | 15
1 | 15 | 20
...

saこの変数に値を代入するだけで値をリセットするには:

void foo()
{
  int a = 10;
  static int sa = 10;

  a += 5;
  sa += 5;

  // reset sa
  if (sa > 100) {
    sa = 10;
  }

  printf("a = %d, sa = %d\n", a, sa);
}
于 2013-10-12T12:43:33.793 に答える