溫馨提示×

c語言containerof的用法是什么

小億
82
2023-12-06 23:32:52
欄目: 編程語言

在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)行操作。

0