ローカル変数とスタック


C言語において、ローカル変数はスタックと呼ばれるメモリの領域に記憶されるようです。
スタックといえば情報科学でよくでてくるLIFO(Last In First Out)の形式で要素の出入りが管理される処理形態ですね。

下の例では、main関数から呼び出されたfuncAの中でvar2=100が宣言しています。
funcBでは、初期化をせずにvar3を宣言しています。そのため、var2の内容がスタックから開放されずに、var3の内容になってしまいました。

#include<stdio.h>

void funcA(void)
{
        int var2=100;
        printf("var2 = %d in funcA\n\n",var2);
        return;
}
void funcB(void)
{
        int var3;
        printf("var3 = %d in funcB\n\n",var3);
        return;
}

int main(void)
{
        int var1=777;
        printf("var1 = %d in main function\n\n",var1);
        funcA();
        funcB();

        return 0;
}


実行結果

var1 = 777 in main function

var2 = 100 in funcA

var3 = 100 in funcB