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