看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《rrosymoon (紫月)》之銘言: : 請問一下喔~我看書上是說,struct跟陣列很像,但它可以 : 將多種不同型態的資料,集合在一起。 : 那,若是使用動態配置記憶體的方式,程式是一次幫它裡面 : 所有的資料型態都給予記憶體嗎?還是可以只給指定的某一 : 個資料型態記憶體呢? : 比如: :  struct word{ : char *word_name; : struct word *next; : }; : ... : wp=(struct word *)malloc(sizeof(struct word)); : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ : 這個部份,程式會幫wp->word_name跟wp->next都分別 : 配置記憶體?所以一次會增加二筆資料的記憶體? :  還是說只有使用到的會給記憶體呢? :  那有辦法只單獨配置wp->word_name的記憶體空間嗎? 你要把函式的責任釐清 malloc就是malloc 上述動作只是說「我有一個指標叫做wp,指向一塊sizeof(struct word) 的空間」 所以裡面的word_name跟next指標都有該有的空間。 有空間才能存放資料,因此你是一定要給next指標一個空間的。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.127.8
sunneo:除非你的設計上允許word_name跟next共用位址 05/04 23:39
rrosymoon:嗯..所以意思是說,使用struct的話,一定會多出一個沒有 05/04 23:41
sunneo:而那位址是透過轉換過的(如xor) 才能這麼做 05/04 23:41
rrosymoon:使用到的空間囉?(就是最後一筆struct中的next的空間) 05/04 23:41
sunneo:有啊 你有使用到 你終究要用他存放下一筆資料的位址吧 05/04 23:42
rrosymoon:已經是最後一筆了,所以next就沒有下一筆的位置可以指了 05/04 23:42
sunneo:你不能假設那一定是最後一筆資料 05/04 23:43
sunneo:如果是最後一筆 next通常是放NULL 05/04 23:43
sunneo:因為任何結點(struct word)都有可能是目前的最後一筆 05/04 23:44
sunneo:如果你希望next也能利用到 那就做成環狀list吧 05/04 23:45
rrosymoon:嗯..那設成NULL的話,是不是就不會佔記憶體空間呢? 05/04 23:48
rrosymoon:還是設成NULL只是用來判斷是不是到最後一筆? 05/04 23:48
sunneo:只是用來判斷最後一筆 05/04 23:50
rrosymoon:喔..所以最後一筆的next必需設成NULL,由此判斷是否到最 05/04 23:53
rrosymoon:後.. 這樣就沒有浪費掉最後的那個next空間了.. 05/04 23:54
rrosymoon:瞭解了~謝謝sunneo大大的解說~^___^ 05/04 23:55
doggingg:指標看熟一點,用動態記憶體配置 05/07 15:13