このプログラムの出力を理解できません-
int main()
{
static int i=5;
if(--i) {
main();
printf("%d ",i);
}
}
出力は 0 0 0 0
私の疑問は、メインへの最初の呼び出しで静的が初期化されないのはなぜですか? static が 5 への最初の呼び出しで初期化され、呼び出し間で共有されると仮定した場合の出力は、4 3 2 1 になるはずです
ありがとう!
このプログラムの出力を理解できません-
int main()
{
static int i=5;
if(--i) {
main();
printf("%d ",i);
}
}
出力は 0 0 0 0
私の疑問は、メインへの最初の呼び出しで静的が初期化されないのはなぜですか? static が 5 への最初の呼び出しで初期化され、呼び出し間で共有されると仮定した場合の出力は、4 3 2 1 になるはずです
ありがとう!
への呼び出しは、ステートメントが呼び出されるmain()
前に 4 回再帰的に呼び出されます。printf()
最初printf()
に呼び出されるまでに、--i
は再帰的に 4 回呼び出されています。は静的であるためi
、その値はその時点で 0 であり、それが出力される値です。
を選択i
しない場合、各呼び出しで値が 5 のnew があるstatic
ため、プログラムは への無限呼び出しでスタックします。が再び呼び出されると、ステートメントはスタックにプッシュされ、後で0 になると、すべてprintfs は i の値、つまり 0 を出力します。main()
i
main()
printf()
i