根据结构体变量的成员,获得该结构体变量的首地址 。
#define offsetof(TYPE, MEMBER) ( (size_t)&((TYPE *)0)->MEMBER )
#define constainer_of(ptr, type, member) ({ \
\
const typeof( (type *)0)->member)) *__mptr = (ptr); \
(type*)(char *)__mptr - offsetof(type, member) ); })
直接用结构体成员,减去该成员在结构体内的偏移,就可以得到该结构体的首地址。
用处:
在一个层层包含的程序中,传入函数的可能是某个结构体变量的成员,通过container_of可以获得该成员对应的变量的首地址。