能不能一種鏈表中鏈接不同的類型呢,相應這種號召,內核鏈表誕生了。
內核鏈表之所以能夠鏈接不同的類型的數據,是因爲它和普通鏈表不一樣,它鏈接的不是數據結構的起始地址,而是鏈接的該數據結構中的的list_head屬性。
下面是比較重要的函數:
其他的都很簡單,專門介紹一下list_entry函數:
函數最後返回的是這個結構體節點起始地址。Ptr是這個節點中list_head屬性的地址,type是這個結構體節點的真實類型,member是這個結點中list_head屬性的名字。
其中typeof關鍵字調用 0->member而沒有出錯,個人認爲這是因爲typeof並不對表達式求值,只是利用了其類型,所以不會出錯。
可以使用如下方式調用:
Struct list_head * pos;
Struct student *tmp;
Tmp = list_entry(pos,struct list_head,pointer);
下面是一段標準使用代碼: