Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のローカル静的変数とは?特徴と使い方を実例付きで解説

ローカル静的変数(local static variable)とは、staticキーワードを付けて宣言されたローカル変数で、宣言された関数の呼び出しが終了しても寿命が尽きないことが最大の特徴です。その寿命はプログラム全体の実行が終わるまで続きます。

また、すべての関数呼び出しで同じ1つの実体を共有するため、前回の呼び出しで代入した値が次回の呼び出し時にも引き継がれます。

ローカル静的変数の主な特徴

  • 関数の実行が終わっても値が保持される
  • プログラム終了までメモリ上に存在し続ける
  • すべての関数呼び出しで同じ変数を共有する
  • 明示的に初期化しない場合、デフォルト値は0になる
  • スコープ(可視範囲)は宣言されたブロック内にとどまる

こうした性質を活かし、「関数が何回呼び出されたか」を数えるカウンタなどによく利用されます。

ローカル変数・グローバル変数との違い

通常のローカル変数は、定義されたブロック({ } の中)でしか参照できず、ブロックの外からはアクセスできません。関数やブロックの実行が終わると、変数は破棄されます。

一方、グローバル変数はブロックの外側で定義され、プログラムの開始から終了まで常に有効で、プログラム中のどこからでもアクセスできます。

ローカル静的変数はこの2つの中間的な存在であり、「スコープはローカル変数と同じ狭さ、寿命はグローバル変数と同じ長さ」と考えると分かりやすいでしょう。

サンプルコード1:ローカル変数の場合

以下はローカル変数を使用したC言語のプログラムです。

#include <stdio.h>

int main(void) {
    int a = 40, b = 30, sum; // ローカル変数:寿命はブロック内のみ
    sum = a + b;
    printf("sum=%d\n", sum);
    return 0;
}

実行結果

上記のプログラムを実行すると、次の出力が得られます。

sum=70

サンプルコード2:グローバル変数の場合

以下はグローバル変数を使用したC言語のプログラムです。

#include <stdio.h>

int c = 30; /* グローバル領域 */

void fun(void) {
    printf("c=%d\n", c); // どの関数からでもアクセス可能
}

int main(void) {
    int a = 10; // ローカル領域
    printf("a=%d, c=%d\n", a, c);
    fun();
    return 0;
}

実行結果

上記のプログラムを実行すると、次の出力が得られます。

a=10, c=30
c=30

サンプルコード3:ローカル静的変数の場合

以下はローカル静的変数を使用したC言語のプログラムです。

#include <stdio.h>

void fun(void) {
    static int a; // 静的変数のデフォルト値は0
    printf("%d ", a);
    a = a + 1;
}

int main(void) {
    fun(); // 呼び出しが終わっても値は保持される
    fun();
    return 0;
}

実行結果

上記のプログラムを実行すると、次の出力が得られます。

0 1

1回目の呼び出しでは初期値の0が出力され、2回目の呼び出しでは前回インクリメントされた値の1が出力されます。これは、関数の呼び出しが終わっても静的変数の値が保持されていることを示しています。

まとめ

ローカル静的変数は、スコープが宣言されたブロック内に限定される一方、寿命はプログラム終了まで続く特殊な変数です。初期値は自動的に0に設定され、関数をまたいで値を保持したい場面(呼び出し回数のカウントなど)で役立ちます。ローカル変数・グローバル変数との違いを理解し、適切に使い分けましょう。

  1. C言語の探索アルゴリズム解説|線形探索と二分探索の違いと実装例

    探索(サーチ)とは、複数の要素で構成されるリストの中から、目的の「キー」となる要素を見つけ出す処理のことです。 リストの中に指定した要素が存在すれば、その探索は「成功」とみなされます。 指定した要素がリストに存在しなければ、その探索は「失敗(不成功)」となります。 C言語で広く使われている代表的な探索手法は、主に次の2つです。 線形探索(Linear Search/リニアサーチ) 二分探索(Binary Search/バイナリサーチ) 線形探索(Linear Search)とは 線形探索は、リストの先頭から順に要素を1つずつ取り出し、キーと一致するかどうかを確認していく、最も基本的な探

  2. Cプログラムを機械語に変換する4つのステップを徹底解説

    プログラムの作成と実行の流れプログラムとは、プログラミング言語で記述された一連の命令の集まりです。プログラマーの仕事は、プログラムを作成し、その動作を確認することです。Cプログラムを機械語に変換して実行可能な形にするまでには、次の4つのステップが必要です。プログラムの作成と編集プログラムのコンパイルプログラムのリンクプログラムの実行1. プログラムの作成と編集プログラムの作成には「テキストエディタ」を使用します。テキストエディタを使えば、文字データの入力・修正・保存が自由に行えます。多くの場合、コンパイラには専用のテキストエディタが付属しています。プログラムを書き終えたら、ファイルとしてディス