【C言語】static付きのローカル変数の仕様と使い方を解説

この記事では、C言語におけるstatic変数の使い方と具体的な使用例、さらにstatic変数とグローバル変数の比較について解説します。

初心者の方でもわかりやすく、サンプルコードを交えて解説していきます。

目次から探す

static変数の使い方

C言語において、static修飾子を付けることで変数をstatic変数として宣言することができます。

static変数は、通常のローカル変数とは異なる特徴を持ちます。

以下では、static変数の宣言方法、初期化方法、スコープとライフタイム、利点と注意点について解説します。

static変数の宣言と初期化

static変数は、通常のローカル変数と同じように宣言しますが、変数名の前にstatic修飾子を付けます。

例えば、以下のように宣言することができます。

static int count;

static変数は、宣言時に初期化することも可能です。

初期化しない場合、static変数は自動的に0で初期化されます。

static int count = 0;

static変数のスコープとライフタイム

static変数のスコープは、宣言されたブロック内に限定されます。

つまり、そのブロック内でのみアクセス可能です。

また、static変数はプログラムが起動してから終了するまでの間、メモリ上に保持され続けます。

これにより、関数が呼び出されるたびに初期化されることがなくなります。

static変数の利点と注意点

static変数の利点は以下の通りです。

  • ローカル変数の値を保持するため、関数呼び出しのたびに初期化する必要がない
  • 関数内でのデータ共有に利用できる

一方、注意点もあります。

  • static変数はグローバル変数と同じく、プログラム全体で共有されるため、他の関数からのアクセスに注意が必要
  • static変数の使用は適切に制限し、必要最小限に留めるべき

以上が、static変数の使い方に関する解説です。

次に、具体的な使用例について見ていきましょう。

static変数の具体的な使用例

カウンタ変数としての利用

カウンタ変数は、特定のイベントや処理の回数を数えるために使用されます。

static変数をカウンタ変数として使用することで、関数が呼び出されるたびに値が保持される特徴があります。

以下は、static変数をカウンタ変数として使用する例です。

#include <stdio.h>
void count() {
    static int counter = 0; // static変数の宣言と初期化
    counter++; // カウンタ変数のインクリメント
    printf("カウンタの値: %d\n", counter);
}
int main() {
    count(); // カウンタの値: 1
    count(); // カウンタの値: 2
    count(); // カウンタの値: 3
    return 0;
}

上記の例では、count関数内でstatic変数counterを宣言し、関数が呼び出されるたびに値がインクリメントされます。

このように、static変数をカウンタ変数として使用することで、関数の呼び出し回数を数えることができます。

ローカル変数の値を保持するための利用

通常、関数内で宣言されたローカル変数は、関数が終了するとその値は破棄されます。

しかし、static変数を使用することで、関数が終了しても値を保持することができます。

以下は、static変数を使用してローカル変数の値を保持する例です。

#include <stdio.h>
void printNumber() {
    static int number = 10; // static変数の宣言と初期化
    printf("numberの値: %d\n", number);
    number += 5; // numberの値を更新
}
int main() {
    printNumber(); // numberの値: 10
    printNumber(); // numberの値: 15
    printNumber(); // numberの値: 20
    return 0;
}

上記の例では、printNumber関数内でstatic変数numberを宣言し、関数が呼び出されるたびに値を更新しています。

このように、static変数を使用することで、関数が終了しても値を保持することができます。

関数内でのデータ共有における利用

複数の関数で同じデータを共有する場合、グローバル変数を使用することが一般的です。

しかし、static変数を使用することで、関数内でのデータ共有を行うこともできます。

以下は、static変数を使用して関数内でのデータ共有を行う例です。

#include <stdio.h>
void increment() {
    static int sharedData = 0; // static変数の宣言と初期化
    sharedData++; // 共有データのインクリメント
}
void printData() {
    static int sharedData = 100; // static変数の宣言と初期化
    printf("共有データの値: %d\n", sharedData);
}
int main() {
    increment();
    increment();
    printData(); // 共有データの値: 100
    return 0;
}

上記の例では、increment関数printData関数内でそれぞれstatic変数sharedDataを宣言しています。

increment関数では共有データをインクリメントし、printData関数では共有データの値を表示します。

このように、static変数を使用することで、関数間でデータを共有することができます。

このstatic変数は、関数内で宣言されているため、他の関数から直接アクセスすることはできません。

関数内でのデータ共有が必要な場合は、グローバル変数を使用する方が適しています。

1 2

この記事のページ一覧
  1. 現在のページ
目次から探す