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

 ポインタの「値渡し」と「参照渡し」で例示したプログラムを、もう一度確認してください。

#include <stdio.h>

void plus1(int x)
{
    x = x + 1;
}

int main(int argc, const char * argv[])
{
    
    // insert code here...
    int a;
    
    a = 1;
    plus1(a);
    
    printf("a = %d\n", a);
    
    return 0;
}

 plus1関数で定義されたxの値は「2」、main関数で定義されたaの値は「1」となります。どうしてこのような状態になるかというと、C言語の場合、関数の中で定義された変数は、その関数の中でしか有効にならないというルールがあります。main関数からplus1関数の変数xを、plus1関数からmain関数の変数aを使うことは出来ません。このような関数の中で定義された変数のことをローカル変数と言います。

 では、main関数でもplus1関数でも使える変数は、どのように書けば良いでしょうか。それは、変数をポインタにして使用するか、以下のように変数を定義します。

#include <stdio.h>

int x;

void plus1() {
    x = x + 1;
}

int main(int argc, const char * argv[])
{
    
    // insert code here...
    x = 1;
    plus1();
    
    printf("x = %d", x);
    
    return 0;
}

 変数xを使用します、という宣言を「include <stdio.h>」のすぐ下に書きました。このように、それぞれの関数の外(出来ればincludeと書かれた部分の直下)で変数の定義を行うことで、plus1関数とmain関数のどちらの関数でも利用することが出来るようになります。このような関数の外で定義された変数のことをグローバル変数と呼んでいます。実際に、上記のプログラムを実行すると「x = 2」と表示されることを確認して下さい。

■スポンサーリンク

このページの先頭へ