• 締切済み

static 変数について

static 変数について 今、C++を勉強しているのですか、static変数がどのように動くのかよくわかりません。 下のプログラムのint a はローカル変数だから、ブロックを抜けたら、初期化されるためstatic変数にして、ブロックを抜けても値を保持するようにすってことはわかるのですが 毎回このブロックに入る度、static int a = 0;を読むことになり、その前に入っていた値はなくなるのではないでしょうか?それとも,static int a と書かれていると,1度しか実行されないから、値が保持され続けるのでしょうか? int add (int x ) { int a = 0; a += x; return a; }

みんなの回答

  • noyuo
  • ベストアンサー率39% (33/84)
回答No.4

C言語の関数CALLの仕組みを理解されていると思いますが、 CALLされると、関数はスタックに積まれます。 (呼ばれるたびにどんどん積まれます。) このとき、ローカルの変数も関数の命令と同じようにスタックに積まれて行きます。 以前にCALLされたときと同じ場所にスタックされることはまずないので、初期化しない変数は、 その都度値が不定になる。 STATICの変数は、スタックに積まれずに一定の場所に初期化されて確保されてるので、 変更後の値も保持される。 また、再帰呼び出し、変数のスコープについても一緒に勉強するといいですね。

回答No.3

static変数は、グローバル変数と同様、モジュールが読み込まれたときに初期化されます。 おおざっぱにいうと、  ・main()が呼ばれた時点で、aは0に初期化されます。  ・もし、add()関数が一度も呼ばれなかったとしても、main()の前に、aは0に初期化されます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

static int a = 0; と static int a; a = 0; とは違う.

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

static変数の定義は一度しか実行されません。 同時に行う初期化も一度きりです。