當你有一個指針從一個指針結構指向另一個已經分配了內存的結構時,函數調用後會發生什麼?我問一個問題提早了結構,導致我問這個問題: scope of struct pointers in functions函數調用後指針會發生什麼變化
例如:
struct example{
//variables and pointers
struct clip *next;
}*Head
,然後我有數據類型結構的函數指針:
struct example *newNode=malloc(sizeof(struct example));
並且在相同的功能中,我將第一個節點(頭部)鏈接到第二個節點(新節點):
Head->next=newNode;
函數退出後鏈接/指針是否仍然保留?我不確定這是否有意義,但是當您在鏈表末尾添加一個新節點時,必須首先瀏覽鏈表以查看鏈表的結束位置(下一個指針= NULL)。
例如:
void insert_at_end(){
//We have a pointer cp that goes through the linked list, initially cp->next points to `null so we create a newnode right away`
//struct example cp and newnode gets malloc'd here
if(Head != NULL){
cp=Head;
while(cp->next !=NULL){
cp=cp->next;
}
cp->next=newNode;
else{
//We link the head to the newNode `because we don't want to change the head for each new node added.`
head=newNode;
}
}
但每個newNode後,在列表的末尾添加我們退出的功能,所以會發生什麼,當我們再次進入功能和經過鏈表,看看它結束了?它如何知道cp-> next指向什麼?
代碼時,所有的警告和調試信息編譯(如:'GCC -Wall -g'在Linux上),並逐步與調試器('在Linux上gdb'),顯示相關的指針,找出。在黑板上寫下正在發生的事情。閱讀幾本很好的C編程書籍。你需要了解堆是什麼,以及'malloc'和'free'在做什麼。 – 2013-03-21 06:28:52
不是很有幫助。我知道我的問題可能不是最好的措辭,但本質上我是問這個問題,因爲我不知道函數退出後指針會發生什麼,所以不能繪出它。特別是當cp-> next指向下一個節點的內存位置時,它是否在函數存在後以某種方式保存?否則,我們還有什麼可以通過鏈表? – user2122810 2013-03-21 06:32:48