在C語言中,container_of
是一個宏,用于獲取包含給定成員的結構體的指針。
container_of
的用法如下:
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) *__mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type, member)); })
其中,ptr
是一個指向成員的指針,type
是包含該成員的結構體類型,member
是成員名。
container_of
宏通過將ptr
的地址減去member
在結構體中的偏移量來計算結構體的起始地址,并將其轉換為type
類型的指針。
這個宏通常用于在數據結構中獲取結構體的指針,例如在鏈表中遍歷節點時,可以使用container_of
宏獲取包含節點的結構體的指針,然后對結構體進行操作。