[英]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
++i
和i = 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.