カテゴリ: C言語 更新日: 2025/12/29

C言語のローカル変数とグローバル変数を完全ガイド!初心者でもわかるスコープの違い

C言語のローカル変数とグローバル変数の違い
C言語のローカル変数とグローバル変数の違い

先生と生徒の会話形式で理解しよう

生徒

「C言語で変数が関数の外にもあったり、中にもあったりしますけど、どう違うんですか?」

先生

「C言語には、ローカル変数とグローバル変数という二種類の変数があります。これは、とても大切な考え方です。」

生徒

「どちらも変数ですよね?何が違うんでしょう?」

先生

「それでは、ローカル変数とグローバル変数の違いについて、わかりやすく解説していきましょう!」

1. C言語のローカル変数とは?

1. C言語のローカル変数とは?
1. C言語のローカル変数とは?

C言語のローカル変数とは、関数の中で宣言された変数のことで、呼び出された関数が動いている間だけ使える変数です。例えば、main関数の中で宣言した変数は、main関数の中だけで使うことができて、関数が終わると自動的に消えます。

身近な例えで説明すると、ローカル変数は「教室の中だけで使えるノート」のようなものです。教室から出るときにはそのノートは使えなくなる、そんなイメージです。


#include <stdio.h>

void test()
{
    int x = 10; // ローカル変数
    printf("%d\n", x);
}

int main()
{
    test();
    // printf("%d\n", x); // これはエラー
    return 0;
}

このように、ローカル変数は関数の外からは見えません。プログラムの書き方を間違えると「未定義の変数です」というエラーが出ます。

2. C言語のグローバル変数とは?

2. C言語のグローバル変数とは?
2. C言語のグローバル変数とは?

グローバル変数とは、関数の外で宣言された変数のことです。プログラム全体からアクセスできるため、複数の関数で同じデータを使いたいときに便利です。

日常の例えにすると、「学校全体で共有している掲示板のようなもの」です。どの教室にいても見ることができるので、とても便利ですが、誰でも書き換えられるという注意点があります。


#include <stdio.h>

int data = 0; // グローバル変数

void add()
{
    data = data + 1;
}

int main()
{
    add();
    add();
    printf("%d\n", data); // 2
    return 0;
}

グローバル変数は、宣言しただけで自動的に初期化されます。例えば、整数型なら0、浮動小数点型なら0.0に初期化されます。

3. ローカル変数とグローバル変数の違いを比較しよう

3. ローカル変数とグローバル変数の違いを比較しよう
3. ローカル変数とグローバル変数の違いを比較しよう

ローカル変数とグローバル変数は、見た目はどちらも変数ですが、性質がまったく違います。下記のように覚えておくと理解しやすいです。

● ローカル変数 → 関数の中だけで使える、関数が終わると消える

● グローバル変数 → プログラム全体で使える、常にメモリ上に存在する

初心者がつまずきやすいポイントとして、「同じ名前のローカル変数とグローバル変数があると、どちらが使われるのか?」という問題があります。


#include <stdio.h>

int value = 50;

int main()
{
    int value = 10;
    printf("%d\n", value);
    return 0;
}

この場合、出力されるのは10です。なぜなら、関数の中で宣言されたローカル変数が優先されるからです。「近くにあるものを優先して使う」というルールだと覚えましょう。

4. グローバル変数を使うときの注意点

4. グローバル変数を使うときの注意点
4. グローバル変数を使うときの注意点

グローバル変数は便利ですが、プログラムが大きくなるほど管理が大変になるという欠点があります。どこからでも書き替えられてしまうため、予期しない動作が起きることがあります。特に初心者は、意図せず値を変更してバグが起きることが多いです。

安全にプログラミングしたいときは、可能な限りローカル変数を使い、必要なときだけグローバル変数を使うようにしましょう。


#include <stdio.h>

int count = 0;

void up()
{
    count++;
}

void down()
{
    count--;
}

int main()
{
    up();
    down();
    printf("%d\n", count);
    return 0;
}

このように、複数の関数が同じ変数に触ると、値がどう変わったのか追いづらくなります。ローカル変数のように限られた範囲で使うほうがプログラムの見通しが良くなります。

5. ローカル変数とグローバル変数の使い分け

5. ローカル変数とグローバル変数の使い分け
5. ローカル変数とグローバル変数の使い分け

プログラミング初心者は、まずローカル変数を中心に使うのがおすすめです。なぜなら、扱う範囲が小さいので間違いが少なく、バグを防ぎやすいからです。プログラムの規模が大きくなってくると、グローバル変数の扱いが難しくなりやすいです。

例えば「ゲームの得点」のように、多くの場所から値が変えられるものはグローバル変数が使われることがありますが、基本は使いすぎない方が安全です。

カテゴリの一覧へ
新着記事
New1
C++
C++のメンバアクセス演算子を完全解説!初心者でもわかる . → :: の使い方まとめ
New2
Rust
Rustの文字列を極める!&str(文字列スライス)の基本概念とString型との違い
New3
C++
C++のキャスト演算子を完全解説!dynamic_cast・static_cast・const_cast・reinterpret_castを初心者向けに説明
New4
C++
C++開発のIDE選びを完全ガイド!初心者でもわかるCLion・Eclipse CDT・Qt Creator比較
人気記事
No.1
Java&Spring記事人気No1
C++
C++の主要な実装をわかりやすく解説!GCC・Clang・MSVCの違いと特徴
No.2
Java&Spring記事人気No2
C言語
C言語を学ぶ初心者におすすめの環境構築手順【2025年版】
No.3
Java&Spring記事人気No3
C言語
C言語のソースコードとヘッダファイルの役割とは?初心者向けにわかりやすく解説!
No.4
Java&Spring記事人気No4
C言語
C言語をオンラインで実行できる便利なコンパイラサービスまとめ【初心者向け】
No.5
Java&Spring記事人気No5
C言語
Visual Studio CodeでC言語を実行する方法【拡張機能の設定と実行手順】
No.6
Java&Spring記事人気No6
C言語
C言語開発でよく使われるエディタとIDEランキング【初心者向け完全ガイド】
No.7
Java&Spring記事人気No7
C++
C++リンカとコンパイラのオプション設定を完全ガイド!初心者にもわかる開発環境の基礎
No.8
Java&Spring記事人気No8
C言語
C言語の列挙型(enum)の使い方を完全ガイド!初心者でもわかる基本操作