静的変数の例誰もがこのプログラムの出力再帰関数で
#include <stdio.h>
int main()
{
static int i=10;
if(--i)
{
main(); /*recursive call main */
printf("%d ", ++i); /* print returned value of main */
}
}
静的変数の例誰もがこのプログラムの出力再帰関数で
#include <stdio.h>
int main()
{
static int i=10;
if(--i)
{
main(); /*recursive call main */
printf("%d ", ++i); /* print returned value of main */
}
}
++i
を説明することができますことは、あなたが
printd("%d ", ++i);
を書くとき、その値は同じままので、あなたは再びi
をインクリメントi = i + 1
と同じです。
static
変数は一度初期化されます。そしてその生涯はプログラムのものです。変数が一度初期化されると、初期値は10になります。
すべての再帰呼び出しでは(if
ステートメントで)デクリメントされ、0に達するとそれ以上は再発しません。
最後の再帰の後、印刷が開始され、リターンします。 printf
文が再帰の後にある
として、それが最後の再帰後の最初の印刷を開始します(ときi=1
)と1 printf
を実行して戻しながら9
に、それが故に1でi
を増やし続ける印刷され、一番上の関数スタックはi
を9とします。
i
は0と等しくないが、関数mainはそれ自身を呼び出します。
if(--i)
{
main(); /*recursive call main */
i
がゼロに等しいその後、再帰が停止し、それぞれがメインの前の呼び出しにコントロールメインリターンと呼ばれるときに、あなたは通話
main(i = 10) -> main(i = 9) ->...-> main(i = 0)
のチェーンを持っています。
メインの前の呼び出しだけ
printf("%d ", ++i); /* print returned value of main */
この文を実行したがって、出力は
1 2 3 4 5 6 7 8 9
'' 1 2 3 4 5 6 7 8 9' ... –
https://ideone.com/vzZhOl –
@AlexLopを印刷することは間違いありません。ありがとう。あなたが正しいです。 –
になりますあなたが予想される出力は何か、あなたが持っているものの問題について教えてください?実際の出力は何ですか?そして、[良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)に時間をかけてください。 –