「みんな教えて! 選手権!!」開催のお知らせ

以下のc++ソース内で、static int b = 100;という式ですが、
1回目に、ここの処理を通ったときに静的変数が作成されると思います。
2回目のループのときに、ここでまたb=100と初期化されています。
ですが、ループを重ねるごとに、カウントが1増えていきます。
staticなので、これは期待通りの動作だとは思うのですが、なぜそうなるのかがわかりません。

コンパイラなどが、staticが頭に付いたものは、2度目のループ以降はこの行を無視するように
しているのでしょうか?

もしそうなら、他に暗黙のルール?のようなことが他にもあるのでしょうか?

考えるとさらにc++がわからなくなってきました。


#include <windows.h>
#include <iostream>
using namespace std;
void test(){
int a = 100;
cout << a << " " << &a << endl;
static int b = 100;
cout << b << " " << &b << endl;
b++;
int * abc = new int [10];
abc[0] = 9999;
cout << abc <<" "<< &abc << " " << abc[0] << endl;
delete [] abc;
}
int main(){
while (1){
Sleep(2000);
test();
}
}

教えてください。
よろしくお願いいたします。

A 回答 (2件)

静的な変数は最初にそこを通ったときにのみ初期化される.

    • good
    • 0
この回答へのお礼

ありがとうございます。
そういうものだと理解します。

お礼日時:2013/05/30 23:01

int b = 100;


とすると変数bはスタック領域に確保されます。スタック領域では関数に入るときに変数の領域が確保され、出るときに解放されます。ですから毎回毎回関数に入るたびに初期値100として確保されるわけです。
でも
static int b = 100;
とすると変数bはスタックではなく固定的な領域に確保されます。従って関数から出ても解放されずに確保されたところにそのまま残ります。次回関数に入ったときは同じところが使用されます。従って今回は関数内で計算が行われるたびに内容が変化します。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2013/05/30 22:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報