質問: 0; i < 10; ++i ){ hoge1+=i; } } ``` ここで変数`hoge1`、for文内の変数`i`はどちらもスタック領域に確保されると思います。 また、変数`i`のスコープはfor文内のみで、ほかからはアクセス出来ません。 質問というのは、for文を抜けた時点で、変数`i`はメモリ上には残るのでしょうか? 何が知りたいかというと、変数のスコープが小さければ小さいほど、 メモリの節約になるのかということです。 よろしくお願いします。
回答: 試しに簡単なプログラムを書いてみました。 ``` #include void f(int n){ if(n == 0) return; int i; printf("i(%d):%p\n", n, &i); { int j; printf("j(%d):%p\n", n, &j); //f(n-1);//(1) } f(n-1);//(2) } int main(void) { f(3); return 0; } ``` (2)で関数`f`を呼び出す場合(1)で関数を呼び出す場合とスコープが異なるので、それぞれの場合で表示されるアドレスのパターンの違いになって現れると予想されます。 (1)のプログラムと(2)のプログラムが同じ(パターンの)出力となるならあらかじめ確保されていると考えてよいと思います。