原型:
offsetof宏:
参数:TYPE:结构体类型(例:struct A);MEMBER:结构体成员(例:sA.b,sA是结构体struct A类型的变量,b是结构体中的成员变量)
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
container_of宏:
参数:ptr:第三个参数member的指针,type:结构体类型,member:结构体成员
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) * __mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type, member)); })
功能:
offsetof宏:获取当前结构体成员距离结构体首地址的偏移量。
container_of宏:已知当前结构体某一成员的指针(地址),反推结构体的指针(地址)。
详解:
offsetof宏:这个宏相对简单,(TYPE *)0 将0地址强制类型