我正在進行初學者(!)練習。功能調用指針問題
我很喜歡傳遞基本變量,也使用&變量參數,所以我可以對返回時未被破壞的變量進行更改。但我仍然在學習指針。我正在研究基本的突變兔子運動(鏈表練習)。
其中我通過聲明班級兔子創建一個鏈表。我按照您的預期設置數據部分和「下一個」指針來設置鏈接。
struct Bunny {
string name;
int age;
// more variables here
Bunny* next;
};
一切都很正常,當我打電話功能做事喜歡用函數來創建兔子:
Bunny* add_node (Bunny* in_root){}
這將設置節點,並返回它就像我想要的。我也可以做一些事情,比如調用一個函數來修改Bunny類,比如老化兔子。
void advanceAge (Bunny* in_root){}
我通過在頭上,然後我可以修改調用的函數兔子,甚至當它返回到主它保持修改。例如,我可以使用:
in_root->age ++;
在被調用的函數,當我回到「主」它仍然改變。基本上我可以在任何調用的函數中使用 - >並永久地進行更改。我認爲,因爲指針是由 - >取消引用(?),但仍然讓我的頭在...
到目前爲止好。
當我想調用一個函數來刪除列表時,問題出現了。 (核選項...沒有更多的兔子)
我可以刪除被調用函數中的所有節點...但它不會更改'主'中的兔子。例如...這不會永久刪除節點。
void DeathCheck(Bunny* in_root){
Bunny* prev_ptr;
prev_ptr = in_root;
if (prev_ptr == NULL){
cout << "No list to check age." << endl; return;
} else {
prev_ptr = NULL; // <- what could I code to have this stick? return;}
// rest of DeathCheck
我很好奇,如果有一種方法可以在被調用的函數中將節點設置爲NULL並讓它粘住?
您需要提供更多詳細信息。 addnalode()如何工作。在哪裏,以及如何,整個兔子列表都被存儲。有一個合理的機會,你可能不會做你認爲你在add_node()中做的事。 –