記憶域期間

#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関数を実行する前の準備段階においてオブジェクトが生成され、プログラムの終了時に消滅する。