亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于動態分配的問題,請教下大神;

關于動態分配的問題,請教下大神;

C C++
慕粉1600176492 2016-12-24 12:34:37
//clist是用來建立鏈表的函數,下面還有代碼沒有寫全;? #include"stdio.h" #define?N?5 typedef?struct?node { int?date; struct?node?*next; }SNODE; ?SNODE?*clist(int?a[])//在主函數中的實參是一個長度為5的一維整形數組;? ?{????????????????????? ? SNODE?*h; ? SNODE?*p,*q; ? int?i; ? q=(SNODE)malloc(sizeof(SNODE)); ? h=q; ? for(i=0;i<N;i++)??????????//在這里每次都給p開辟一個空間;? ? {??????????????????????//可否理解為p指向的區域一共開辟了5個這樣大小的空間;?(這里我知道第二次開辟空間的時候,第一次的空間還是存在的,沒有清零也沒有覆蓋);? ? p=(SONDE?*)malloc(sizeof(SNODE));//而每次開辟的空間都是連續的,而且p指向了這些空間的首地址,也就是第一次開辟的那個空間的地址;? ? p->date=a[i];????????????????????//可不可以這樣理解呢?? ? q->next=p;?????????????????????//malloc函數的定義中所說的開辟連續內存空間是不是就是這個意思呢?? ? q=p; } q->next=0; return?h; ?} ?//這些代碼都是本人在自己看的一本講c語言書上抄過來的,但是這本書是給初學者看的(本人也是初學者(應該能看出來)),這本書并沒有講的特別透徹; ?//所以在這里問一下各位大神給解釋下這里該如何解釋;謝謝!? ?//以下的代碼省略;
查看完整描述

2 回答

已采納
?
0puppy0

TA貢獻24條經驗 獲得超7個贊

可供分配的內存為數組占用的內存空間,指針用來指向可供分配的內存的起始位置所,以初始化為數組的起始位置。malloc函數的功能是分配長度為n個字符的存儲空間,并返回指向該存儲空間的起始位置的指針。它首先檢查剩余內存空間有沒有n個,如果有,則分配n個字符的內存空間(處理方法:將 初始位置后移n個字節使其指向剩余的可供分配的內存的起始位置,返所分配的內存空房間的初始位置),否則,返回空指針表示分配不成功。

查看完整回答
反對 回復 2016-12-24
  • 慕粉1600176492
    慕粉1600176492
    (空間能夠被分配的情況下)就是說p指向了一個開辟的空間,第二次再讓p指向一個空間,那么p就指向了這兩個空間嗎? 為什么不會是替換呢
  • 慕粉1600176492
    慕粉1600176492
    明白了
?
柴門3952844

TA貢獻4條經驗 獲得超2個贊

有個問題,連續幾次的malloc,無法保證一定開辟到連續的內存位置,如果可以保證,那就沒必要下面這一句了:

q->next=p;

正因為無法保證連續幾次開辟出的是連續的內存,所以才必須將每次開辟出來的內存地址保存在鏈表中

鏈表節點2個變量,一個是當前節點的數據,一個是指向下一個節點的指針,如果開辟出來的保證是連續的地址那就無需鏈表而用數組就行了。

查看完整回答
1 反對 回復 2016-12-26
  • 2 回答
  • 1 關注
  • 1463 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號