簡體   English   中英

誰能解釋這個程序的輸出

[英]Can anyone explain output of this program

帶有遞歸函數的靜態變量示例

 #include <stdio.h>
    int main()
    {
        static int i=10;
        if(--i)
        {
            main(); /*recursive call main */
            printf("%d ", ++i); /* print returned value of main */

        }
    }

雖然i不等於零,但函數 main 會調用自身。

    if(--i)
    {
        main(); /*recursive call main */

所以你有一連串的電話

main( i = 10 ) -> main( i = 9 ) ->...-> main( i = 0 )

i等於 0 時,遞歸停止並且每個被調用的 main 將控制權返回到之前的 main 調用。

之前的 main 調用只是執行這條語句

printf("%d ", ++i); /* print returned value of main */

因此輸出將是

1 2 3 4 5 6 7 8 9

++ii = i + 1所以當你寫的時候

printd("%d ", ++i);

您再次增加i以使其值保持不變。

static變量初始化一次。 它的生命周期是程序的。 由於變量被初始化一次,它的初始值為 10。

在每次遞歸調用中,它都會遞減(在if語句中),當達到 0 時,它不會進一步重復。

在最后一次遞歸之后,它將開始打印並返回。

由於printf語句在遞歸之后,它將在最后一次遞歸之后(當i=1 )開始第一次打印,並將打印 1 到 9。

在執行printf並返回時,它會不斷將i增加 1。因此,最頂層的函數堆棧將得到i為 9。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM