
以下の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();
}
}
教えてください。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
静的な変数は最初にそこを通ったときにのみ初期化される.
No.2
- 回答日時:
int b = 100;
とすると変数bはスタック領域に確保されます。スタック領域では関数に入るときに変数の領域が確保され、出るときに解放されます。ですから毎回毎回関数に入るたびに初期値100として確保されるわけです。
でも
static int b = 100;
とすると変数bはスタックではなく固定的な領域に確保されます。従って関数から出ても解放されずに確保されたところにそのまま残ります。次回関数に入ったときは同じところが使用されます。従って今回は関数内で計算が行われるたびに内容が変化します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコン活用方法
-
STEAM版BF4が起動しない
-
ChatGPTの回答をコピーしても箇...
-
webメールの表示について
-
jtrim 1.53cが正常な動きをし...
-
いきなりPDF ダウンロード方法
-
パソコンソフトでお知恵を下さ...
-
CubesoftPDFはAdobe Acrobat Re...
-
Outlookのエラー表示について
-
既存のプログラムで拡張子HPGの...
-
Windows Media Playerが動作し...
-
premiere「ディスク上のファイ...
-
Prishwallというソフト
-
mp3 ファイルをCDに焼く無料ソ...
-
google サーチコンソロールを設...
-
Acronis True lmage OEM版のシ...
-
自分で描いた下手な絵を綺麗に...
-
powerAutomateの使用メモリにつ...
-
microsoft teamsの左のアイコン...
-
Kritaについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
static変数のループ内での処理
-
DreamweaverCS3 テンプレートの...
-
Dreamweaver現状維持したまま編...
-
DreamweaverMX のテンプレート...
-
htmlコードのロック
-
Dreamweaver一部にだけ編集可能...
-
ワードのテンプレート編集について
-
PowerPointの置換の「すべて置...
-
チキン南蛮のソース タルタル派...
-
左右クリック禁止でクリックす...
-
巡回置換と交代群について
-
パワーポイントで参照ページを...
-
カンマ区切り形式ではなく、セ...
-
キングファイルの背表紙を作成...
-
<IFRAME>でコンテンツ部分のみ...
-
トロッファとは何ですか??
-
txtファイル内の指定の単語の数...
-
エクセルVBAでマルチページの切...
-
ExcelのROUND関数を一括解除し...
-
htmlでテキストファイルの中身...
おすすめ情報