C言語の静的変数とグローバル変数の違いは何ですか。
c言語のstatic変数とグローバル変数はスコープとライフタイムが異なります。
- 有効範囲:
- グローバル変数:グローバル変数は関数の外部で定義され、プログラム内のあらゆる関数からアクセスでき、つまりグローバルスコープを持ちます。
- 静的変数:静的変数は関数の内部に定義され、定義された関数内でのみ利用可能であり、局所スコープを持ちます。
- ライフサイクル
- グローバル変数:グローバル変数は、プログラムが実行され始めると作成され、プログラムが終わると消滅する、プログラムの実行中ずっとメモリ空間を持ち続ける変数のことです。
- 静的変数:静的変数は、プログラムの実行開始時に作られ、プログラムの終了時に破棄され、またその記憶域はプログラムの実行中ずっと存在します。
- 初期値
- グローバル変数:グローバル変数は、明示的に初期化されなかった場合、デフォルトで 0 またはヌルポインタに初期化されますが、定義時に初期値を指定することもできます。
- 静的変数:静的変数は、明示的に初期化を行わなければ、0またはNullポインタに初期化され、定義時に初期値を指定することもできます。
- アクセス権限:
- グローバル変数: グローバル変数は、プログラムのすべての関数からアクセス・変更できます。
- 静的変数:ひとつの関数内でのみアクセス・変更できる変数
まとめると、静的変数とグローバル変数のスコープの違いは、静的変数はローカル、グローバル変数はグローバルであること。ライフサイクル上の違いは、静的変数とグローバル変数の記憶域は、どちらもプログラムの実行中ずっと存在することです。