offsetof和contain_of

#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的功能是通过指向成员的指针求成员在结构体变量的地址。


版权声明:本文为wangjian20095356原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。