課程
/后端開發
/C
/Linux C語言結構體
p2不是只在循環體前分配過一次內存嗎?第二次賦值后為什么沒有覆蓋掉之前的節點?我腦袋有點轉不過來
2015-12-03
源自:Linux C語言結構體 5-2
正在回答
這是鏈表的知識啊 else?p2->next?=?p1; ?在這句代碼里面P2->next ?指向了P1 ?然后把P1的值付給了P2 ?這個時候的 P2是另外一個內存空間 ? 下一次用是不會覆蓋上一次的地方的 ?P2最后會指向 最后一個節點 ?只需要找到頭指針 ?根據鏈表的性質就可以輸出整個鏈表了?
有話好說別打臉 提問者
//動態鏈表??同樣具有頭指針??每個節點包含數據和指向下一個節點的指針 #include<stdio.h> #include<malloc.h> struct?weapon?{ int?price; int?atk; struct?weapon?*?next;?//?定義鏈表結構體?這行是指針 }; struct?weapon?*?create(){??//創建鏈表的函數 struct?weapon?*head;??//頭指針 struct?weapon?*p1,?*p2;?//兩個指針變量?一個指向新創的?一個指向上一個節點 int?n=0;?//計算節點個數 p1=p2=(struct?weapon?*)malloc(sizeof(struct?weapon));?//malloc?分配內存塊的函數??sizeof?判斷數據類型長度符 scanf("%d,%d",&p1->price,&p1->atk);?//輸入數據到第一個節點 head=NULL;?//初值置空 while(p1->price!=0){??//判斷輸入結束條件 n++; if(n==1)?head=p1;??//第一個節點讓head指向這個節點 else?p2->next?=?p1;??//如果不是第一個節點?讓上一個節點的next指向新節點 p2=p1;??//每一次把新節點保存到p2 p1=(struct?weapon?*)malloc(sizeof(struct?weapon));?//給p1重新分配空內存塊 scanf("%d,%d",&p1->price,&p1->atk);?//繼續往p1寫入數據??(從else開始執行) } p2->next?=?NULL;?//寫入完成后給最后一個節點的指向賦空 return?(head); } int?main(){ return?0; }
能把代碼弄出來嗎??
舉報
C語言的深入,幫助小伙伴們進一步的理解C語言,趕緊看過來
4 回答這串代碼是申請了兩個'動態存儲空間'分別給p1和p2,還是只是申請一了段'動態存儲空間'將地址同時給了p1和p2
1 回答p1=p2=(struct weapon*)malloc(sizeof(struct weapon));//可以把p2=去掉嗎,p2=在這里有什么意義嗎.
2 回答我覺得循環中的p2->next應該等于p1->next 為什么會是p2->next=p1有哪位大神看懂了能幫我解釋一下嗎?
2 回答為什么要讓p1賦給p2?
1 回答p1,p2本身不就是地址嗎?為什么還要取它們的地址來scanf賦值?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-12-03
這是鏈表的知識啊 else?p2->next?=?p1; ?在這句代碼里面P2->next ?指向了P1 ?然后把P1的值付給了P2 ?這個時候的 P2是另外一個內存空間 ? 下一次用是不會覆蓋上一次的地方的 ?P2最后會指向 最后一個節點 ?只需要找到頭指針 ?根據鏈表的性質就可以輸出整個鏈表了?
2015-12-03
2015-12-03
能把代碼弄出來嗎??