(7-1)ローカル変数
ローカル変数とは宣言された位置から対応する閉じ括弧 } が現れるまでの範囲内で使用可能な変数のことです。
ローカル変数には2種類あり、動的変数と静的変数があります。
動的変数
動的変数とは宣言された位置でメモリが一時的に確保され、対応する閉じ括弧 } が現れたらメモリが解放される(使えなくなる)変数のことです。
ローカル変数はスタックと呼ばれる特殊なメモリ空間に確保されます。
動的変数は宣言(メモリ確保)した時点ではゴミデータが入っていて初期化しないと(何らかのデータを代入してからでないと)使うことはできません。
ご注意ください。
スタック領域はインスタンス※1毎に決まっていて、コンパイル(リンク)時に特に指定しなければ2MB程度(コンパイラにより異なります)が割り当てられると思います。 つまり、あまり大きなメモリを必要とする変数(配列変数)を宣言してしまうとスタックオーバーフローというエラーで実行中に停止してしまう可能性がありますのでご注意下さい。
静的変数
静的変数は動的変数同様、宣言された位置から対応する閉じ括弧 } が現れるまでの範囲内で使用可能な変数のことです。
ただ異なるのは確保されるメモリ領域で、静的変数は動的変数のようにメモリは解放されません。
プログラムが終了するまで、メモリ領域に存在します(値は保持されます)。
静的変数の宣言の仕方は、
static int z;
のように、型の前にstaticを付けます。
静的変数は動的変数とは異なり、
インスタンス起動時に0に初期化されるのであらたまって初期化しなくても使用できるはずですが、
static int z = 0;
のように、宣言するときに何らかの値で明示的に初期化しておいた方が良いように思います。
- ※1
- インスタンスとはプログラムコードとは別の、プログラムを実行している本体のことを言います(ちょっと分かりにくいでしょうか?)。
つまり、同じプログラム(例えばメモ帳)を2つ起動しているとします。このときプログラムコードはメモリ上に1つ存在すれば2つのメモ帳で共通で使用可能です。
2つのメモ帳で異なるのはデータ部です。具体的には編集している文章と管理データです。
Windows(OS)は同じプログラムでも異なるデータを別々に管理して複数のメモ帳を起動する(いや、していると思います)のですが、その別々に管理している単位をインスタンスと読んでいます。
(何となくお分かり頂けたでしょうか?)