【C言語】第5章第4回:グローバル変数とローカル変数の違い
グローバル変数とローカル変数は、C言語のプログラムにおいて異なる用途を持つ重要な要素です。この章では、それぞれの特性や使用例を詳しく解説します。
1. グローバル変数とローカル変数の基本
1.1 グローバル変数とは?
グローバル変数は、プログラム全体で使用可能な変数で、関数の外側で定義されます。
例:グローバル変数の使用
#include <stdio.h>
int globalVar = 10; // グローバル変数
void displayGlobalVar() {
printf("Global Variable: %d\n", globalVar);
}
int main() {
printf("Global Variable in main: %d\n", globalVar);
displayGlobalVar();
return 0;
}
解説:
int globalVar = 10;
:globalVar
はプログラム全体で使用可能。displayGlobalVar()
:別の関数内からでもglobalVar
にアクセスできます。- グローバル変数は、初期値が0に設定されます(初期化しない場合)。
1.2 ローカル変数とは?
ローカル変数は、関数内またはブロック内でのみ有効な変数です。
例:ローカル変数の使用
#include <stdio.h>
void displayLocalVar() {
int localVar = 5; // ローカル変数
printf("Local Variable: %d\n", localVar);
}
int main() {
displayLocalVar();
// printf("%d\n", localVar); // エラー:localVarはmainで未定義
return 0;
}
解説:
int localVar = 5;
:localVar
はdisplayLocalVar
内でのみ有効。printf("%d\n", localVar);
:main
からはアクセスできないため、エラーになります。
2. グローバル変数とローカル変数の違い
以下に、グローバル変数とローカル変数の主な違いをまとめます。
特性 | グローバル変数 | ローカル変数 |
---|---|---|
定義場所 | 関数の外 | 関数またはブロック内 |
有効範囲 | プログラム全体 | 定義された関数またはブロック内 |
初期値 | 自動的に0に初期化 | 初期化しないと不定値 |
寿命 | プログラム終了まで | 関数またはブロックの終了まで |
3. グローバル変数とローカル変数の注意点
3.1 名前の衝突
グローバル変数とローカル変数が同じ名前を持つ場合、ローカル変数が優先されます。
例:名前の衝突
#include <stdio.h>
int globalVar = 10; // グローバル変数
int main() {
int globalVar = 20; // ローカル変数
printf("Local Variable: %d\n", globalVar); // ローカル変数が優先
printf("Global Variable: %d\n", ::globalVar); // グローバル変数にアクセス(C++の例)
return 0;
}
解説:
- ローカル変数が優先されるため、意図しない動作を避けるには変数名を工夫します。
- C言語では、
::
のような明示的なスコープ解決演算子はサポートされません。
4. 練習問題
以下の課題に挑戦して、グローバル変数とローカル変数の使い方を確認してください。
- グローバル変数を使って、複数の関数で同じカウンターを操作するプログラムを作成してください。
- ローカル変数を使って、関数ごとに異なるカウンターを操作するプログラムを作成してください。
- グローバル変数とローカル変数を同時に使用し、それぞれの値を表示するプログラムを作成してください。
5. 練習問題の解答と解説
問1の解答
#include <stdio.h>
int counter = 0; // グローバル変数
void increment() {
counter++;
}
int main() {
printf("Counter: %d\n", counter);
increment();
printf("Counter after increment: %d\n", counter);
return 0;
}
解説:グローバル変数counter
は、main
関数とincrement
関数の両方で使用されています。
6. まとめ
グローバル変数とローカル変数の違いを理解することで、適切なスコープ管理が可能になります。次回は、関数内の変数管理についてさらに詳しく学びます。