2012-11-18 129 views
5
#define TAILQ_ENTRY(type)      \ 
struct {        \ 
    struct type *tqe_next; /* next element */   \ 
    struct type **tqe_prev; /* address of previous next element */ \ 
} 

我發現上面的代碼使用指針指針,這不是唯一的一個。我想知道爲什麼這樣做?指針本身無法處理它?爲什麼Linux使用這個「指向指針」的列表?

回答

5

我想這裏的重點是刪除元素。考慮你有一個singly linked list,這意味着你能夠轉發導航其整個節點。

現在考慮一個你想要刪除的通用列表節點(比如說N_j)。刪除之後,您想要輕鬆鏈接上一個節點(說N_{j-1})到下一個(說N_{j+1})。因此,您需要修改前一個節點N_{j-1}的字段tqe_next,該字段需要指向它的指針,即指針指向tqe_prevN_j

換句話說,在僞代碼而言,下式成立

*(N_j.tqe_prev) == (N_{j-1}).tqe_next 

N_j.tqe_prev == &(N_{j-1}).tqe_next 

+0

@Tom薛,我進一步改進了我的答案。請看一看。 – Acorbe

+0

謝謝!現在很清楚。 –

相關問題