変数 (プログラミング)
その変数に代入したデータを利用することを、変数の参照(さんしょう、英: reference)という。
一度も代入を行なっていない、つまり初期化していない変数を参照することは意味を成さず、不正である。例えば未初期化のローカル変数を参照すると、C言語やC++では(コンパイルエラーにはならないものの)未定義動作を引き起こし、JavaやC#ではコンパイルエラーを引き起こす。
しかし一部のプログラミング言語における特定の変数では、明示的な初期化式がなくとも変数を定義した段階で、自動的に何らかのデータ(通例ゼロまたはゼロに準ずる値)が既定値として変数に関連付けられる。このような場合は、初期化を明示的に記述しないまま変数を参照できる。例えばC/C++の静的記憶域期間を持つ変数や、Java/C#のフィールドなどが挙げられる。
変数の生存期間(英: lifetime)はプログラム実行時に記憶域割り当てが保証されている範囲である。
変数が生存期間内にあるとき、変数は存在し、不変のアドレスをもち、最後に書き込まれた値を取り出せる。すなわち「変数」としての役割を果たす。一方生存期間外にあるとき、そのアクセスは保証されない(未定義動作あるいは禁止)。
生存期間という概念は記憶域すなわちメモリの確保・解放を可能にする。自動変数では生存期間の終了時にメモリが即時自動解放され、ガベージコレクションをサポートする言語あるいは環境では生存期間外にある変数のメモリがガベージコレクタによって事後的に自動解放される。逆にプログラム全体で値を保持し続ける必要がある静的変数では、実行全体にわたる生存期間の設定によりこれを可能にしている(例: グローバル変数)。
言語や規格によって呼称は異なる。一般的な別名として寿命、C言語およびC++では生存期間 (lifetime) や記憶域期間 (storage duration) 、Common Lispではエクステント (extent) 、C#では有効期間 (lifetime) と呼ばれる。