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