[問題] 雙向鏈結串列
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
無
問題(Question):
在linux中,他的雙向鏈結串列因為要可以儲存不同的資料型態,所以他的鏈結串列和資
料是分開來的,要使用時在將資料加到鏈結串列上
例如這樣
struct list_head {
struct list_head *next, *prev;
};
要使用時再這樣
struct num {
int number; //data
struct list_head list;
};
但是這樣要如何實作?
像是如果我想要新增一個節點
但list的資料型態是list_head,意思是我只能新增一個list_head的節點,而這個結點無
法儲存資料
如果我新增一個num型態的節點,但是我的list並不能指向一個num型態的節點
而我新增了一個num型態的節點,我用list_head的指標去指向這個num型態的節點,我原
本預期應該是錯誤的(可能直接編譯錯誤或是在執行階段當掉),但居然成功運作了
但我完全不知道為何會這樣
餵入的資料(Input):
無
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
https://ideone.com/dQZkIq
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.126.109.77
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1522599114.A.D56.html
推
04/02 00:31,
7年前
, 1F
04/02 00:31, 1F
→
04/02 00:33,
7年前
, 2F
04/02 00:33, 2F
→
04/02 00:43,
7年前
, 3F
04/02 00:43, 3F
不太懂,我用list指向num,那我存取的方式應該是用list的方式阿,但是list
並沒有number的資料阿
※ 編輯: wei115 (59.126.109.77), 04/02/2018 00:56:52
推
04/02 01:03,
7年前
, 4F
04/02 01:03, 4F
→
04/02 01:05,
7年前
, 5F
04/02 01:05, 5F
推
04/02 02:55,
7年前
, 6F
04/02 02:55, 6F
→
04/02 02:56,
7年前
, 7F
04/02 02:56, 7F
→
04/02 02:57,
7年前
, 8F
04/02 02:57, 8F
→
04/02 02:58,
7年前
, 9F
04/02 02:58, 9F
→
04/02 02:59,
7年前
, 10F
04/02 02:59, 10F
推
04/02 03:02,
7年前
, 11F
04/02 03:02, 11F
→
04/02 03:03,
7年前
, 12F
04/02 03:03, 12F
感謝回覆
後來我想了一下
發現其實有隱式轉型的發生(struct list_head *) => (struct num *)
所以我一開始用(struct list_head *) 指向下一個節點
但我在存取member時是轉型成(struct num *),自然就能存取struct num 的 member
看不懂container_of.....看來我對C真的不熟="=,有沒有什麼推薦的資料嗎?謝謝
還有其實我不是想看linux kernel(沒那麼厲害...)
只是正事做得有點崩潰,所以來找個感覺比較有趣的問題來看看XD
所以我只是想知道這個linked list是怎麼的東西
※ 編輯: wei115 (120.109.132.88), 04/02/2018 12:21:33
※ 編輯: wei115 (120.109.132.88), 04/02/2018 12:21:52
推
04/02 12:36,
7年前
, 13F
04/02 12:36, 13F
→
04/02 12:37,
7年前
, 14F
04/02 12:37, 14F
→
04/02 12:38,
7年前
, 15F
04/02 12:38, 15F
→
04/02 12:41,
7年前
, 16F
04/02 12:41, 16F
推
04/02 13:11,
7年前
, 17F
04/02 13:11, 17F
→
04/02 13:12,
7年前
, 18F
04/02 13:12, 18F
→
04/02 13:13,
7年前
, 19F
04/02 13:13, 19F
→
04/02 14:53,
7年前
, 20F
04/02 14:53, 20F
推
04/02 16:15,
7年前
, 21F
04/02 16:15, 21F
→
04/02 16:16,
7年前
, 22F
04/02 16:16, 22F
→
04/02 16:33,
7年前
, 23F
04/02 16:33, 23F
推
04/03 04:44,
7年前
, 24F
04/03 04:44, 24F
推
04/03 06:46,
7年前
, 25F
04/03 06:46, 25F
→
04/03 06:47,
7年前
, 26F
04/03 06:47, 26F
→
04/03 06:48,
7年前
, 27F
04/03 06:48, 27F
→
04/03 06:48,
7年前
, 28F
04/03 06:48, 28F