假設(shè)我定義了一個(gè)能構(gòu)建動(dòng)態(tài)鏈表的函數(shù),它能返回一個(gè)頭指針,我在主函數(shù)中返回值賦給同類型指針。
為什么在主函數(shù)中能輸出所有節(jié)點(diǎn)?函數(shù)調(diào)用后,分配的動(dòng)態(tài)存儲(chǔ)空間不是沒有了嗎。求解釋,謝謝
2 回答
已采納

新_day_day_new
TA貢獻(xiàn)18條經(jīng)驗(yàn) 獲得超6個(gè)贊
c中全局變量是存放在棧中,在程序結(jié)束時(shí)釋放存儲(chǔ)空間。函數(shù)中的形式參數(shù)和非static修飾的參數(shù)都是在動(dòng)態(tài)存儲(chǔ)區(qū)中。它們?cè)诤瘮?shù)開始是被分配空間結(jié)束時(shí)釋放其空間。而用malloc等函數(shù)分配的空間由用戶需要時(shí)調(diào)用malloc動(dòng)態(tài)分配并且由用戶自己釋放或者在整個(gè)程序結(jié)束時(shí)釋放。所以說雖然你是在函數(shù)中申請(qǐng)的空間但是不會(huì)隨函數(shù)結(jié)束而導(dǎo)致存儲(chǔ)空間被釋放。因?yàn)槟銢]有在函數(shù)里人為釋放。所以你返回的頭指針依然指向一個(gè)存在的空間,在主函數(shù)里還能輸出節(jié)點(diǎn)。

望遠(yuǎn)
TA貢獻(xiàn)1017條經(jīng)驗(yàn) 獲得超1032個(gè)贊
這是堆??臻g分配的區(qū)別: 1、棧:由操作系統(tǒng)自動(dòng)分配釋放?,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧; 2、堆:?一般由程序員申請(qǐng)內(nèi)存,也要由程序員釋放,而通過malloc申請(qǐng)的內(nèi)存就屬于堆內(nèi)存。
- 2 回答
- 1 關(guān)注
- 1798 瀏覽
添加回答
舉報(bào)
0/150
提交
取消