container_of说明
通过一个成员变量地址以及该成员变量的名称获取该结构体指针
// ptr为该成员变量地址
// type结构体类型
// member成员变量名称
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
//获取MEMBER在TYPE结构体中偏移地址
#define offsetof(TYPE,MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
实现举例:
typedef struct _MEM
{
int mem1;
int mem2;
int mem3;
}MEM;
MEM mem;
int main()
{
//输出即为mem2所在结构体变量地址
cout <<container_of_u(&mem.mem2,MEM,mem2)<<endl;
return 0;
}