遞歸調用放在系統堆棧上,這是我讀過的。但如果這是真的,爲什麼在下面的程序中,我得到了所有rec()所調用的相同地址。他們不應該在堆棧上有連續的地址嗎?爲什麼這些調用具有相同的內存地址?
void rec(int n)
{
printf("%d -> %p\n",n,rec);
if(n ==0)
return;
else
rec(n-1);
}
當我打電話REC(5)在我的main()的代碼,它給瞭如下輸出,
5 -> 0x4004f4
4 -> 0x4004f4
3 -> 0x4004f4
2 -> 0x4004f4
1 -> 0x4004f4
0 -> 0x4004f4
,對不起,那如果我的查詢是太基本。但是我不能提出任何解釋,除非是由於某種編譯器優化。但我不確定它。同時,請告訴我任何可以幫助我在運行時查看程序內存(不是大小,但內容)的工具。
在此先感謝!
UPDATE:
我在每次調用增加了一個局部變量i,我得到了我想要看到的。
5 -> 0x4004f4 0x7fff507d376c
4 -> 0x4004f4 0x7fff507d373c
3 -> 0x4004f4 0x7fff507d370c
2 -> 0x4004f4 0x7fff507d36dc
1 -> 0x4004f4 0x7fff507d36ac
0 -> 0x4004f4 0x7fff507d367c
謝謝@EVERYONE :)
您打印的是rec的地址,與堆棧無關。 –
如果您想要堆棧地址,請嘗試輸出局部變量的地址。 –
謝謝@CharlieBurns – kuroop