🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
複数のローカル変数のスコープ(変数宣言により作製された変数の使用可能な範囲)を考察してみましょう。その2
複数のローカル変数のスコープ(変数宣言により作製された変数の使用可能な範囲)を考察してみましょう。その2
マックス「では
次のプログラムではっ
int a;
int b;
int c;
は
main関数内で定義されているので
変数
a
b
c
は
main関数のローカル変数だ-☆(*´▽`*)~~
は~はっはっは~は~
簡単ん~💖 簡単ん~💖」
#include <iostream>
using namespace std;
int main(){
int a;
for(a=1;a<3;a++){
int b;
for(b=1;b<4;b++){
int c;
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
}
}
return 0;
}
ソーラー
「そのとおりです。
このプログラムは
まず
int c;
for(c=1;c<5;c++)
{
cout << c << "回目のご飯はNouvel de かつおです\n";
}
の実行によって
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
が生成されることになり
😊正確には
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
が生成されることになり
次に
int b;
for(b=1;b<4;b++)
{}
により、
生成された
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
が三回繰り返され
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
が生成されることとなり
😊正確には生成された
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
が三回繰り返され
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
が生成されることとなり
最後に
int a;
for(a=1;a<3;a++){}によって
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
が2回繰り返されることにより
😊正確には
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
が2回繰り返された
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
cout << 1 << "回目のご飯はNouvel de かつおです\n";
cout << 2<< "回目のご飯はNouvel de かつおです\n";
cout << 3<< "回目のご飯はNouvel de かつおです\n";
cout << 4 << "回目のご飯はNouvel de かつおです\n";
が実行されることにより
ビルド実行結果は
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
となります
合計6回 コンパイル結果に
1回目のご飯はNouvel de かつおです
2回目のご飯はNouvel de かつおです
3回目のご飯はNouvel de かつおです
4回目のご飯はNouvel de かつおです
が表示されています
この場合
ローカル変数宣言
int c;
によって作製されたローカル変数cのスコープは
ローカル変数cが変数宣言された{}(ブロック)内となり
👉👈で示された範囲
#include <iostream>
using namespace std;
int main(){
int a;
for(a=1;a<3;a++){
int b;
for(b=1;b<4;b++){
int c;👉
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
👈}
}
return 0;
}
となります。
ローカル変数宣言
int b;
によって作製されたローカル変数bのスコープは
ローカル変数bが変数宣言された{}(ブロック)内の
int b;以下の行となり
👉👈で示された範囲
#include <iostream>
using namespace std;
int main(){
int a;
for(a=1;a<3;a++){
int b;👉
for(b=1;b<4;b++){
int c;
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
}
👈}
return 0;
}
となります
ローカル変数宣言
int a;
によって作製された変数aのスコープは
ローカル変数aが変数宣言された{}(ブロック)内の
int a;以下の行となり
👉👈で示された範囲
#include <iostream>
using namespace std;
int main(){
int a;👉
for(a=1;a<3;a++){
int b;
for(b=1;b<4;b++){
int c;
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
}
}
return 0;
👈}
となります。
ローカル変数cのスコープはせまいですね。
ここで次のプログラムのように
ローカル変数cのスコープ外でローカル変数cを使ってしまうと
プログラムの実行時ビルドエラーが表示されます
#include <iostream>
using namespace std;
int main(){
int a;
for(a=1;a<3;a++){
int b;
for(b=1;b<4;b++){
int c;👉
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
👈}
}
cout << c << "ここはローカル変数cのスコープの外です。\n";
//↑ローカル変数cのスコープの外の部分に変数cを使った命令文を追加しました
return 0;
}
ソーラー「このプログラムを実際にビルド実行してみると
#include <iostream>
using namespace std;
int main(){
int a;
for(a=1;a<3;a++){
int b;
for(b=1;b<4;b++){
int c;
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
}
}
cout << c << "ここはローカル変数cのスコープの外です。\n";
//↑ローカル変数cのスコープの外の部分に変数cを使った命令文を追加しました
return 0;
}
ビルド実行結果
エラー C2065 'c': 定義されていない識別子です。
エラー (アクティブ) E0020 識別子 "c" が定義されていません
と表示されます。
このようにビルドエラーが表示されるのは
命令文
cout << c << "ここはローカル変数cのスコープの外です。\n";
の中で用いられているcが
ローカル変数宣言
int c;
のスコープ外で使用されているからなんです。
つまり ローカル変数はグローバル変数のように
変数宣言した行以下がすべてスコープに
なるわけではないということです。」
マックス「いままでは
変数のスコープというものがわからず
for文のブロック{}内でつかわれる変数が機能するよう
その変数の変数宣言を
プログラム内の
どこに記述したらいいか
いまいちわからなかったんだよなあ
ははは
だから
次の🍎のプログラムのように
👇
変数宣言
int a;
int b;
int c;
を記述するのか
🍎
#include <iostream>
using namespace std;
int main(){
int a;
int b;
int c;
for(a=1;a<3;a++){
for(b=1;b<4;b++){
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
}
}
return 0;
}
この
🍊プログラムのような位置に
変数宣言
int a;
int b;
int c;
を記述するのか
🍊
#include <iostream>
using namespace std;
int main(){
int a;
for(a=1;a<3;a++){
int b;
for(b=1;b<4;b++){
int c;
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
}
}
return 0;
}
変数宣言の位置によってどのような違いがでるのか
\(^o^)/
わからなかったんだよな~
しかし ローカル変数宣言のスコープがわかってきたので
この2つのプログラムのちがいも
わかるようになったわけだ。
最初の🍎プログラムでは
🍎
#include <iostream>
using namespace std;
int main(){
int a;
int b;
int c;
for(a=1;a<3;a++){
for(b=1;b<4;b++){
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
}
}
return 0;
}
変数a
変数b
変数c
のスコープは
ブロック内の👉と👈の間の部分となる。
下のプログラムにその範囲を表してみると
👇
🍎
#include <iostream>
using namespace std;
int main(){
int a;👉aのスコープの開始位置
int b;👉bのスコープの開始位置
int c;👉cのスコープの開始位置
for(a=1;a<3;a++){
for(b=1;b<4;b++){
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
}
}
return 0;👈a,b,cのスコープの終端位置
}
こんな感じかな。
それに対し
🍊のプログラムでは→」
🍊
#include <iostream>
using namespace std;
int main(){
int a;
for(a=1;a<3;a++){
int b;
for(b=1;b<4;b++){
int c;
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
}
}
return 0;
}
マックス「→
変数宣言int a;が実行されたブロック{}内の👉👈
の範囲となり
🍊
#include <iostream>
using namespace std;
int main(){
int a;👉
for(a=1;a<3;a++){
int b;
for(b=1;b<4;b++){
int c;
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
}
}
return 0;
👈}
変数宣言int b;が実行されたブロック{}内の👉👈
の範囲となり
(下のプログラムを参照してください)
🍊
#include <iostream>
using namespace std;
int main(){
int a;
for(a=1;a<3;a++){
int b;👉
for(b=1;b<4;b++){
int c;
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
}
👈}
return 0;
}
変数cのスコープは
変数宣言int c;が実行されたブロック{}内の👉👈
の範囲となるわけか。
(下のプログラムを参照してください)
🍊
#include <stdio.h>
int main(){
int a;
for(a=1;a<3;a++){
int b;
for(b=1;b<4;b++){
int c;👉
for(c=1;c<5;c++){
cout << c << "回目のご飯はNouvel de かつおです\n";
}
👈}
}
return 0;
}
マックス「この2つのプログラムの場合は
結局
変数宣言
int a;
int b;
int c;
の位置がかわってはいるが
ビルド実行結果は同じになるんだな」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます