グローバル変数とローカル変数

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

グローバル変数とローカル変数の違いの理解は、プログラミングを行ううえでは大事です。
変数は、それが有効となるスコープ(プログラムの範囲)を持ちます。

スポンサーリンク

グローバル変数とは、それが宣言された箇所から、プログラムの終わりまで、ずっと有効となる変数のことです。
ローカル変数のスコープは、宣言されたブロック({ }で囲まれた部分)となります。

#include <iostream>
int count;
 
int main() {
    count = 0;    // グローバル変数を初期化
 
    // ローカルのスコープ
    {
        int count = 0;    // ローカル変数の初期化
        while (true) {
            if (count > 10)
                break;
            std::cout << count << "\n";
            count++;
        }
        std::cout << "1. count? : " << count << "\n";
    }
 
    ++count;
    std::cout << "2. count? : " << count << "\n";
    return(0);
}

ここで、「1. count? :」と「2. count? : 」で表示されるcountは、何になるでしょうか?
実行結果。

0
1
2
3
4
5
6
7
8
9
10
1. count? : 11
2. count? : 1

「1. count? : 11」となっていることから、while文のすぐ外側でも、変数の値が有効となっていることが分かります。
「if (count > 10)」がbreakの条件であることから、while文を最後に抜けた後は、countの値は「11」となります。

さらに外側の、「// ローカルのスコープ」({ }で囲まれた部分)のスコープを抜けた後、つまり、「2. count? : 」の部分では、今度は「2. count? : 1」と、countの値は「1」になっています。
この段階では、ローカルスコープのcountは、もはや有効ではなく、「count = 0; // グローバル変数を初期化」が、グローバルスコープで「++count;」により1だけインクリメントされた値が表示されていることになります。

スポンサーリンク
 
スポンサーリンク