C言語における静的変数

こんにちは、若いプログラマーたち!今日は、C言語の世界における静的変数の興味深い旅に出発しましょう。あなたの近所の親切なコンピュータサイエンスの先生として、私は明確な説明と多くの例を通じてこの概念を案内します。それでは、始めましょう!

C - Static Variables

静的変数とは?

静的変数は、C言語における特別な種類の変数で、独特の性質を持っています。プログラムの「長期記憶」として考えてください。通常の変数は関数呼び出しごとに現れて消えますが、静的変数はプログラムの寿命全体にわたって存在します。

静的変数の特徴

静的変数が特別なものにする主要な特徴を見てみましょう:

特徴 説明
寿命 プログラムの実行全体に存在
スコープ 宣言されたブロックに限定
デフォルト値 明示的に初期化されなければ0に初期化
存储領域 データセグメントに格納、スタックではない
保持 関数呼び出し間で値を保持

静的変数の宣言方法

静的変数を宣言するのは簡単です。変数宣言の前にstaticキーワードを追加するだけです。基本的な構文は以下の通りです:

static data_type variable_name = initial_value;

例えば:

static int count = 0;

C言語における静的変数の例

実際の動作を理解するために、いくつかの例を見てみましょう。

例1: 関数呼び出しカウンタ

#include <stdio.h>

void countCalls() {
static int count = 0;
count++;
printf("この関数は%d回呼ばれました\n", count);
}

int main() {
for (int i = 0; i < 5; i++) {
countCalls();
}
return 0;
}

この例では、countCalls()関数が何回呼ばれたかを追跡しています。static int count変数は関数呼び出し間で値を保持し、正確にカウントをします。

プログラムを実行すると以下のようになります:

この関数は1回呼ばれました
この関数は2回呼ばれました
この関数は3回呼ばれました
この関数は4回呼ばれました
この関数は5回呼ばれました

例2: 独自ID生成器

#include <stdio.h>

int generateID() {
static int id = 100;
return ++id;
}

int main() {
for (int i = 0; i < 5; i++) {
printf("生成されたID: %d\n", generateID());
}
return 0;
}

この例では、静的変数を使用してシンプルなID生成器を作成しています。generateID()が呼ばれるたびに、静的変数idをインクリメントしてユニークなIDを返します。

出力:

生成されたID: 101
生成されたID: 102
生成されたID: 103
生成されたID: 104
生成されたID: 105

静的変数を関数に渡す

静的変数を関数に渡すことはできるのでしょうか?答えはイエスです!しかし、重要なのは静的変数の値を渡していること、変数自体を渡しているわけではないことです。

以下はその例です:

#include <stdio.h>

void modifyValue(int x) {
x = x + 10;
printf("関数内: %d\n", x);
}

int main() {
static int num = 5;
printf("関数呼び出し前: %d\n", num);
modifyValue(num);
printf("関数呼び出し後: %d\n", num);
return 0;
}

出力:

関数呼び出し前: 5
関数内: 15
関数呼び出し後: 5

như bạn có thể thấy, 静的変数 nummain() 内で変更されていません。なぜなら、modifyValue() 内で値を変更しただけだからです。

静的変数とグローバル変数の類似点

静的変数とグローバル変数はいくつかの類似点があり、時々混乱を招きます。それを整理しましょう:

方面 静的変数 グローバル変数
寿命 プログラムの実行全体 プログラムの実行全体
デフォルト値 0に初期化 0に初期化
存储領域 データセグメント データセグメント
スコープ 宣言されたブロックに限定 プログラム全体からアクセス可能

主な違いはスコープにあります。グローバル変数はプログラム全体からアクセス可能ですが、静的変数は宣言されたブロックに限定されます。

結論

そして、ここまでに、C言語における静的変数の世界を旅しました。そのユニークな特徴から実用的な例まで、多くのことをカバーしました。静的変数はプログラムの「象」のようなものです – 長い記憶があり、ショー全体にわたって存在します!

あなたがプログラミングの冒険を続ける中で、静的変数は多くのシナリオで非常に役立ちます。関数呼び出し間で状態を保持する、カウンタを作成するなど、さまざまな用途に使えます。

練習を続け、コードを書き続け、そして最も重要なのは、C言語を楽しむことです!次回まで、ハッピーコーディングを!

Credits: Image by storyset