container_of
宏是一个用于获取结构体实例的指针,通过其成员变量的指针
在 C 语言中,container_of
宏的定义如下:
#define container_of(ptr, type, member) ({ \ const typeof(((type *)0)->member) *__mptr = (ptr); \ (type *)((char *)__mptr - offsetof(type, member)); })
这里的 ptr
是成员变量的指针,type
是结构体类型,member
是结构体中成员变量的名称。offsetof
是一个宏,用于计算结构体中成员变量的偏移量。
container_of
宏的工作原理如下:
- 首先,计算成员变量在结构体中的偏移量。
- 然后,将成员变量的指针减去偏移量,得到结构体实例的指针。
这种方法可以用于遍历链表、树等数据结构,因为这些数据结构通常使用指针连接各个节点。通过 container_of
宏,我们可以从节点中的某个成员变量的指针获取到节点的指针,从而访问节点的其他成员变量和相关操作。
总之,container_of
宏与指针运算密切相关,它提供了一种方便的方式来获取结构体实例的指针,从而简化了对结构体成员变量的访问和操作。