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
,然后就可以訪問結構體中的其他成員了。