1. 程式人生 > >遞迴函式中靜態變數的疑惑

遞迴函式中靜態變數的疑惑

本帖最後由 hanyj_3000 於 2011-09-02 22:30:25 編輯 以下的函式功能是把一個整數比如 int num = 2345;轉化為字串2345存到陣列buf。用遞迴來寫。對其中的靜態變數i有一大疑問。
C/C++ code ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 void intTochar(int OrignNum,char *Buffer) { static int i = 0; if (OrignNum / 10) { intTochar(OrignNum / 10,Buffer); } Buffer[i++] = OrignNum % 10 + 
'0'; Buffer[i] = '\0'; } void main() { static int i = 0; int num = 2345; char buf[10] = {0}; intTochar(num,buf); printf("buf = %s\n",buf); }

如果我在main中intTochar(num,buf);設定一個斷點,當我除錯進入這個函式,隨著遞迴的層層呼叫,最後intTochar的i會變成4。當調試出來回到main函式的intTochar(num,buf),發現main中i的值是0。由此看來,main中的i和intTochar的i不是同一個i,這個從檢視它們記憶體地址也可以得知。我的疑問:
疑問:intTochar函式中遞迴呼叫的時候,為什麼每次遞迴呼叫intTochar時,其中的i的地址變數都是一樣,就是說它們是同一個i?它們的關係其實也有點像main和intTochar的關係啊,也是呼叫關係啊。我總感覺每一次遞迴呼叫intTochar函式時,i不應該是同一個i(但總它們的記憶體地址看卻又是同一個i),所以它們的值能夠遞增到4。我就是對這點不解!希望高人賜教!