C++の変数スコープとは?ローカル変数とグローバル変数の違いを解説
スコープとは
スコープ(有効範囲)とは、プログラムの中で変数が参照・利用できる領域のことです。大まかに分けると、変数を宣言できる場所は主に次の3つあります。
関数またはブロックの内部 —— 「ローカル変数」と呼ばれます
関数の仮引数として定義される場所 —— 「仮引数」と呼ばれます
すべての関数の外部 —— 「グローバル変数」と呼ばれます
関数や仮引数については、後の章で詳しく扱います。ここでは、ローカル変数とグローバル変数について解説していきます。
ローカル変数
関数やブロックの内部で宣言された変数はローカル変数と呼ばれ、その関数やブロック内のコードからのみ使用できます。ローカル変数は、宣言された関数の外側からは認識されません。
次はローカル変数を使用したサンプルです。
サンプルコード
#include <iostream>
using namespace std;
int main () {
// ローカル変数の宣言
int a, b;
int c;
// 実際の初期化
a = 10;
b = 20;
c = a + b;
cout << c;
return 0;
}
グローバル変数
グローバル変数は、すべての関数の外側、通常はプログラムの先頭付近で定義されます。グローバル変数は、プログラムが実行されている間ずっと値を保持し続けます。
また、グローバル変数にはどの関数からでもアクセスできます。つまり、一度宣言すれば、プログラム全体のどこからでも利用可能になるのです。
続いて、グローバル変数とローカル変数を組み合わせたサンプルを見てみましょう。
サンプルコード
#include <iostream>
using namespace std;
// グローバル変数の宣言
int g;
int main () {
// ローカル変数の宣言
int a, b;
// 実際の初期化
a = 10;
b = 20;
g = a + b;
cout << g;
return 0;
}
同名のローカル変数とグローバル変数
ローカル変数とグローバル変数に同じ名前を付けることも可能ですが、関数内ではローカル変数の値が優先されます。
サンプルコード
#include <iostream>
using namespace std;
// グローバル変数の宣言(値は20)
int g = 20;
int main () {
// 同名のローカル変数を宣言(値は10)
int g = 10;
cout << g;
return 0;
}
実行結果
10
この例では、main関数内のローカル変数 g の値「10」が出力されました。グローバル変数の値「20」ではなく、ローカル変数が優先されたことが確認できます。
ローカル変数とグローバル変数の初期化
ローカル変数は定義してもシステムによって自動的に初期化されないため、自分で初期値を設定する必要があります。一方、グローバル変数は定義時にシステムが自動的に初期化してくれる点が大きな違いです。
グローバル変数のデータ型ごとの自動初期値は以下の通りです。
| データ型 | 自動初期値 |
|---|---|
| int | 0 |
| char | '\0' |
| float | 0 |
| double | 0 |
| ポインタ | NULL |
未初期化のローカル変数を使用すると予期しない動作の原因となるため、宣言後に必ず初期化する習慣をつけましょう。
-
Pythonの変数のスコープを徹底解説!グローバル変数とローカル変数の違い
Pythonの変数のスコープとは プログラム内で宣言されたすべての変数が、どこからでもアクセスできるわけではありません。変数にアクセスできるかどうかは、その変数をどこで宣言したかによって決まります。 変数の「スコープ」とは、特定の識別子(変数名)にアクセスできるプログラム上の範囲のことです。Pythonには、大きく分けて以下の2種類のスコープが存在します。 グローバル変数(Global variables) ローカル変数(Local variables) グローバル変数とローカル変数の違い 関数の内部で定義された変数はローカルスコープを持ち、関数の外部で定義された変数はグローバルスコープ
-
Pythonのグローバル変数とローカル変数の違いを徹底解説!スコープとglobalキーワードの基本
Pythonの変数には、大きく分けて「グローバル変数」と「ローカル変数」の2種類があります。 グローバル変数のスコープはプログラム全体に及ぶためどこからでもアクセスできますが、ローカル変数のスコープは、その変数が定義された関数の中だけに限定されます。 def func(): x = Python print(x) print(s) s = Tutorialspoint print(s) func() print(x) 上記のプログラムでは、xがローカル変数、sがグローバル変数です。ローカル変数は、それを定義した関数(この場合はfunc())の中からしかアクセスできず、