プロが教えるわが家の防犯対策術!

C言語プログラミングについて
int ex = 0;
void func(void)
{
static int sx = 0;
int ax = 0;
printf("ax=%d, sx=%d, ex=%d\n", ax++, sx++, ex++);
}
int main(void)
{
int i;
for (i = 0; i < 5; i++)
func();
return 0;

}
このプログラムはexとsxは1~4まで表示されますがaxは数字が変化せずに0のまま繰り返されます。なぜでしょうか?

静的

自動変数というものが関わっているのですが、、
どういうものなのか?簡単に説明お願いします。

A 回答 (3件)

c言語に限らず、どんな言語で書いたプログラムでも、動作にメモリが必要です。


WindowsやLinuxなどのいわゆる普通のOSでは、プログラムの実行を開始する時にメモリを確保します。
各変数は、その確保したメモリの中に配置されます。

c言語では
関数の中で宣言された変数は関数実行時、メモリ内に配置され、関数を終了すると、配置したことを忘れ去ります。

一方、staticと宣言した変数は、確保したメモリ上のある決まった場所に、プログラムが終了するまで配置され続けます。
ですので、関数を終了してもsxが値を保持するのは理解できると思いますが、
なぜsx=0が効かないという仕様なのか。その背景や思想を唱えられるほどc言語を愛しておりませんので、そこはどうかご勘弁を。
    • good
    • 0

axは関数funcのン内部変数なので関数mainから呼び出されるたびに初期値0がセットされ、その値を印字してから+1されるから。



参考まで。
    • good
    • 0

変数を、いつ宣言して、いつ解放するか。

そのタイミング制御の問題。
ex, ax, sx それぞれ、いつ宣言されて、いつ解放されるか、書いてみて。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!