おさらい 静的メンバ変数とは何のことでしたでしょうか?グローバル静的(static)変数とはグローバル変数のことです

ソーラー「


自作関数内で宣言されたローカル静的(static)変数は


自作関数内でのみ使用することができるローカル変数なのでしたね


その様子を示すプログラムは以下のようになっていました

👇


#include <iostream>


using namespace std;



void f(void) {

static int a = 1;

cout << a << "をとりこみました。\n";

a++;

}


int main() {


int a = 1;/*🌞🌞ここです、ここにint a=1;を持ってきました🌞🌞*/

f();

f();

f();

cout << a << "をとりこみました。\n";

return 0;

}


マックス「


int a = 1;

f();

f();

f();

の前にもってきたか・・・


f();

f();

f();

が実行されると


自作関数fのローカルstatic変数aに格納されている値は4となるが


自作関数fのローカルstatic変数aは


main関数のブロック{}内で変数宣言された


変数aとは全く異なる別の変数だ


ということは


別の変数に格納されている値が4になったとしても


main関数のブロック{}内で変数宣言された


変数aに格納されている値は


int a=1;


が実行されたときに格納された数値データ1のまま変化しない


つまり


cout << a << "をとりこみました。\n";


の実行結果は


1をとりこみました


になる


どうだ?」


ソーラー「それでは😊


プログラムの実行結果は・・・


#include <iostream>


using namespace std;



void f(void) {

static int a = 1;

cout << a << "をとりこみました。\n";

a++;

}


int main() {


int a = 1;/*🌞🌞ここです、ここにint a=1;を持ってきました🌞🌞*/

f();

f();

f();

cout << a << "をとりこみました。\n";

return 0;

}


プログラムの実行結果


1をとりこみました。

2をとりこみました。

3をとりこみました。

1をとりこみました。


ソーラー「



それに対し


自作関数内でもmain関数内でも


使用することのできる


グローバル静的(static)変数というものがありましたね」



マックス「??そんなの


あったけか?」



ソーラー「ふふ


とりあえず


次のプログラムをご覧ください」

👇


#include <iostream>


using namespace std;


static int a=1;//👈グローバル静的(static)変数宣言を行っています


void f(void){


cout << a << "をとりこみました。\n";


a++;


}


int main(){


cout << a << "をとりこみました。\n";

f();

a = a + 1;

f();

a = a + 1;

f();

cout << a << "をとりこみました。\n";


return 0;

}


プログラムの実行結果


1をとりこみました。

1をとりこみました。

3をとりこみました。

5をとりこみました。

6をとりこみました。


ソーラー「


このプログラムでは


main関数の外で


aのグローバル静的(static)変数宣言


static int a=1;//👈グローバル静的(static)変数宣言を行っています



行っています


この場合


main関数内でも自作関数内でも


共通して


変数a


を使用できるようになります


そして


main関数内で変数aに格納された数値データは


自作関数内の変数aに引き継がれますし


自作関数内で変数aに格納された数値データは


main関数内の変数aに引き継がれます


もちろん


f();が実行されても


グローバル静的(static)変数a



グローバル静的(static)変数aに格納されているデータが消えてしまうことはありません


このプログラムでは


static int a=1;


の実行後


main関数内で


cout << a << "をとりこみました。\n";


が実行されていますので


1をとりこみました。



コマンドプロンプト画面に表示されます


次に

f();


が実行されて


cout << a << "をとりこみました。\n";


a++;


が実行されて


1をとりこみました。



コマンドプロンプト画面に表示されます


このとき


a++;


の働きにより


a の値は2に変化します


f();


の実行により


aの値は2に変化したわけですが


f();


の実行が終了しても


グローバル静的(static)変数aに格納されたデータ2は消去されることなく


そのまま


グローバル静的(static)変数aに保存されることになります


次に


a = a + 1;


が実行されるときも


グローバル静的(static)変数aに保存された数値データ2は引き継がれることになります



a = a + 1;


が実行されると


a の値は2から3に変化します


次に

f();


が実行されると


cout << a << "をとりこみました。\n";


a++;


が実行されて


3をとりこみました。



コマンドプロンプト画面に表示されます


このとき


a++;


の働きにより


a の値は4に変化します


次に


a = a + 1;


が実行されると


a の値は5に変化します


次に

f();


が実行されて


cout << a << "をとりこみました。\n";


a++;


が実行されて


5をとりこみました。



コマンドプロンプト画面に表示されます


このとき


a++;


の働きにより


a の値は6に変化します


最後に


cout << a << "をとりこみました。\n";



が実行されて


6をとりこみました。



コマンドプロンプト画面に表示されます


マックス「


main関数の外で


aのグローバル静的(static)変数宣言


static int a=1;//👈グローバル静的(static)変数宣言を行っています



を実行すると


main関数内でも自作関数内でも


共通して


変数a


を使用できるようになるって・・・?


どっかで聞いたような・・・??」


ソーラー「そうなんです


main関数の外で


aのグローバル変数宣言


int a=1;//👈グローバル変数宣言を行っています



を実行すると


main関数内でも自作関数内でも


共通して


変数a


を使用できるようになりました


つまり


aのグローバル静的(static)変数宣言


static int a=1;//👈グローバル静的(static)変数宣言を行っています



aのグローバル変数宣言


int a=1;//👈グローバル変数宣言を行っています



同じ働きをしていることになります


(aのグローバル静的(static)変数宣言


static int a=1;//👈グローバル静的(static)変数宣言を行っています



aのグローバル変数宣言


int a=1;//👈グローバル変数宣言を行っています


は全く同じことをしているのかというとそうではありません


aのグローバル静的(static)変数宣言


static int a=1;//👈グローバル静的(static)変数宣言を行っています



aのグローバル変数宣言


int a=1;//👈グローバル変数宣言を行っています


では違いがあるのですが


そのことについては別のエピソードでのお話になります)



先程のプログラムの


aのグローバル静的(static)変数宣言


static int a=1;



aのグローバル変数宣言


int a=1;


に置き換えても全く同じプログラムの実行結果になります


そのプログラムはこちらです

👇


#include <iostream>


using namespace std;


int a = 1;


void f(void) {




cout << a << "をとりこみました。\n";


a++;


}


int main() {


cout << a << "をとりこみました。\n";

f();

a = a + 1;

f();

a = a + 1;

f();

cout << a << "をとりこみました。\n";


return 0;

}


プログラムの実行結果


1をとりこみました。

1をとりこみました。

3をとりこみました。

5をとりこみました。

6をとりこみました。

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る