🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
自14 static変数が用いられた自作関数が実行された後もstatic変数に格納された数値データは保存されますがローカル変数でもあるので main関数内で定義された同じ名前の変数には影響を与えません
自14 static変数が用いられた自作関数が実行された後もstatic変数に格納された数値データは保存されますがローカル変数でもあるので main関数内で定義された同じ名前の変数には影響を与えません
ソーラー「では 先程のつづき いきま~す🌞🌞🌞」
#include <iostream>
using namespace std;
void f(void){
static int a=1;
cout << a << "をとりこみました。\n";
a++;
}
int main(){
f();
f();
f();
return 0;
}
ビルド実行結果は
1をとりこみました。
2をとりこみました。
3をとりこみました。
ソーラー「
前のエピソードでもご覧になられたように
このプログラムにおいて
自作関数f内で変数宣言されているローカル変数aの情報は
f();が実行されても消えることなく保持されつづけています。。
ですが
次のプログラムのように
👇
#include <iostream>
using namespace std;
void f(void){
static int a=1;
cout << a << "をとりこみました。\n";
a++;
}
int main(){
f();
f();
f();
cout << a << "をとりこみました。\n";
return 0;
}
👆
f();
f();
f();
の次に
の次に
命令文
cout << a << "をとりこみました。\n";
をかきこんでも
このプログラムはビルドエラーがでて実行されません。
なぜなら
static変数宣言 static int a=1;をもちいて
自作関数fの変数aの情報が保持されても
いままでのローカル変数のルールどおり
自作関数f内で変数宣言されたローカル変数aは
変数名が同じaであっても
main関数の中で変数宣言され作製された変数a
とは別の変数ということになり
static int a=1;をもちいて
f();
f();
f();
の実行を経て
最終的に
自作関数f内で変数宣言されたstatic変数aに数値データ4が格納されることになっても
main関数内でaは変数宣言されていないので
main関数内でaという名の変数は使用できません
もうすこし 付け加えると
自作関数f内でaが変数宣言されても
main関数内の変数aは変数宣言されたことにはなりません。
自作関数f内でaが変数宣言されても
main関数内でaが変数宣言されていない状態でプログラムを実行しても
エラー (アクティブ) E0020 識別子 "a" が定義されていません
エラー C2065 'a': 定義されていない識別子です。
とビルドエラーが表示されます。
そこで次のプログラムのように
自作関数fとは別に
main関数内でも変数aを変数宣言しておけば
#include <iostream>
using namespace std;
void f(void) {
static int a = 1;
cout << a << "をとりこみました。\n";
a++;
}
int main() {
f();
f();
f();
int a =1;
/*🌞🌞ここです🌞🌞*/
cout << a << "をとりこみました。\n";
return 0;
}
ビルド実行結果
1をとりこみました。
2をとりこみました。
3をとりこみました。
1をとりこみました。
と無事にコンパイルできますね。
ならば・・・」
マックス「えっ続きがあるのか?」
ソーラー「このプログラムで
int a = 1;
を
f();
f();
f();
の前にもってきたなら
cout << a << "をとりこみました。\n";
の
ビルド実行結果はどうなるとおもいますか?
そのプログラムはこちらです
👇
#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をとりこみました。
ソーラー「おめでとうございま~す 正解で~す」
マックス「おお やったぜぇぇいぃ
のりぴ~ うれぴ~~」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます