C言語

【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;localVardisplayLocalVar内でのみ有効。
  • 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. 練習問題

以下の課題に挑戦して、グローバル変数とローカル変数の使い方を確認してください。

  1. グローバル変数を使って、複数の関数で同じカウンターを操作するプログラムを作成してください。
  2. ローカル変数を使って、関数ごとに異なるカウンターを操作するプログラムを作成してください。
  3. グローバル変数とローカル変数を同時に使用し、それぞれの値を表示するプログラムを作成してください。

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. まとめ

グローバル変数とローカル変数の違いを理解することで、適切なスコープ管理が可能になります。次回は、関数内の変数管理についてさらに詳しく学びます。