container_of
是一个 C 语言宏,用于通过结构体成员的指针获取包含该成员的结构体的指针。
它的使用方法如下:
#define container_of(ptr, type, member) \
((type *)((char *)(ptr) - offsetof(type, member)))
参数说明:
ptr
:指向结构体的某个成员的指针。type
:结构体的类型。member
:结构体中的成员名称。container_of
宏通过使用 offsetof
宏来计算成员在结构体中的偏移量,然后将成员指针减去偏移量,得到结构体的指针。
以下是一个使用 container_of
宏的示例:
#include <stddef.h>
struct Person {
char name[20];
int age;
};
int main() {
struct Person p = {"John Doe", 25};
int *p_age = &p.age;
struct Person *p_ptr = container_of(p_age, struct Person, age);
printf("Name: %s\n", p_ptr->name);
printf("Age: %d\n", p_ptr->age);
return 0;
}
输出结果:
Name: John Doe
Age: 25
在上面的示例中,通过 container_of
宏,我们可以通过 p.age
的指针 p_age
获取到包含该成员的结构体 struct Person
的指针 p_ptr
,然后就可以访问结构体中的其他成员了。