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

C言語の静的変数(static変数)とは?特徴・構文・サンプルコードを解説

静的変数とは

C言語における静的変数は、初期化が一度だけ行われる特殊な変数です。通常の自動変数と異なり、コンパイラはプログラムの終了までこの変数を保持し続けます。そのため、関数を抜けても値が失われることはありません。

静的変数は関数の内部でも外部でも定義できます。関数内で宣言された場合、その変数はそのブロックに対してローカルとなり、他の関数から直接アクセスすることはできません。

また、静的変数には以下のような重要な特徴があります。

  • デフォルト値はゼロ(明示的に初期化しなくても0で初期化される)
  • プログラムの実行が終了するまで生存し続ける
  • 初期化は最初の一度だけ行われる

静的変数の構文

C言語で静的変数を宣言する構文は以下の通りです。

static datatype variable_name = value;

各要素の意味は次の通りです。

  • datatype − 変数のデータ型。int、char、float などを指定します。
  • variable_name − プログラマーが自由に決めることができる変数名です。
  • value − 変数を初期化するための任意の値。省略した場合はデフォルトでゼロになります。

サンプルコード

以下は、C言語における静的変数の使用例です。自動変数と静的変数を宣言し、それぞれの値と合計を出力しています。

#include <stdio.h>

int main() {
    auto int a = -28;
    static int b = 8;

    printf("The value of auto variable : %d\n", a);
    printf("The value of static variable b : %d\n", b);

    if(a != 0)
    printf("The sum of static variable and auto variable : %d\n", (b + a));

    return 0;
}

実行結果

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

The value of auto variable : -28
The value of static variable b : 8
The sum of static variable and auto variable : -20

静的変数と自動変数の違い

サンプルコードにも登場した auto 変数と static 変数の主な違いを整理しておきましょう。

項目自動変数静的変数
寿命関数の実行中のみプログラム終了まで
初期化呼び出しごとに行われる一度だけ行われる
デフォルト値不定(ガベージ値)ゼロ
メモリ領域スタック領域静的領域(データ領域)

このように、静的変数は関数呼び出し間で値を保持したい場合や、カウンタ・フラグなどを管理したい場面で特に役立ちます。

  1. Bashの変数の基本:設定・削除・子プロセスへの渡し方を実例付きで解説

    コンピュータサイエンス(そして日常的なコンピューティング)において、変数とは、後で使う情報を一時的に保持しておくメモリ上の場所のことです。言い換えれば、データを入れたり取り出したりするための一時的な保管容器です。Bashシェルでは、そのデータは単語(コンピュータ用語では「文字列」)でも数値(「整数」)でも構いません。 パソコンで意識的に変数を使ったことがない人でも、生活の中では変数に相当するものを使っているはずです。「あれを取って」「これを見て」といった言葉は、文法上の変数(代名詞)です。「これ」や「あれ」が何を指すのかは、話し手が頭の中で思い浮かべているものや指差している対象によって決まりま

  2. 【初心者向け】PowerShellの変数の基本:作成・確認・削除・追加の方法をわかりやすく解説

    コンピュータサイエンスにおいて、変数とは後で利用するために任意の情報を格納しておくメモリ上の場所のことです。言い換えれば、データを一時的に保存し、必要なときに取り出すための「入れ物」です。シェル環境では、そのデータは単語(文字列)でも数字(整数)でも構いません。 パソコンで意識的に変数を使ったことがない人でも、日常生活の中で変数に近いものを使っているはずです。「あれを取って」「これを見て」といった言葉は、文法上の変数(いわゆる代名詞)と言えます。「これ」「あれ」が何を指すのかは、話し手が頭に思い浮かべているものや指差している対象によって決まります。数学でも未知の値を記号で表しますが、それも立派