#define offsetof(type, member) (size_t)(&(((type*)0)->member))
说明:其中type表示某结构体类型,member表示该结构体类型某一成员名。offsetof的功能是求结构体中某一成员在整个结构体中的偏移量。
具体方法是将地址0强制转换成type*类型,此时成员的地址就是成员在结构体中的偏移量。
有了offsetof,就可以得到另外一个很有用的宏:
#define contain_of (ptr, type, member) ((type*)(((char*)ptr)-(offsetof(type, member))))
说明:其中ptr是指向结构体某一成员的指针,contain_of的功能是通过指向成员的指针求成员在结构体变量的地址。