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;
 
// 全局变量声明
int g = 20;
 
int main ()
{
  // 局部变量声明
  int g = 10;
 
  cout << g;
 
  return 0;
}

上記のコードをコンパイルして実行すると、次の結果が生成されます:

10

ローカル変数とグローバル変数を初期化します

ローカル変数が定義されている場合、システムはそれらを初期化しません。自分で初期化する必要があります。グローバル変数を定義すると、システムは自動的に次の値に初期化します:

データ型初期化デフォルト値
int0
char'