記憶域期間
#include<stdio.h> int fx = 0; void func(void){ static sx = 0; int ax = 0; printf("%3d%3d%3d\n",ax++,sx++,fx++); } int main(void){ int i; puts(" ax sx fx"); puts("---------"); for(i=0;i<10;i++){ func(); } puts("---------"); return 0; }
自動記憶域期間
関数の中で、記憶域クラス指定子staticをつけずに定義されたオブジェクトは自動記憶域期間をもち、次のような性質が与えられる。
「プログラムの流れが、宣言を通過する際に、そのオブジェクトが生成される。宣言を囲むブロックの終点(すなわち})を通過するときに、そのオブジェクトが消滅する。」
静的記憶域期間
関数の中でstaticをつけて宣言されたオブジェクトや、関数の外で宣言・定義されたオブジェクトは、次のような性質をもつ。
「プログラムの開始時、具体的にはmain関数を実行する前の準備段階においてオブジェクトが生成され、プログラムの終了時に消滅する。
」