Answers
这个宏应该是参考
linux
的
offsetof
宏定义:
#define offsetof(TYPE, MEMBER) (size_t)(&(((TYPE*)0)->MEMBER))
这个宏的分析:
(TYPE*)0
将0
地址强转为TYPE
类型的指针
((TYPE*)0)->MEMBER
获取TYPE
结构体中的成员MEMBER
&(((TYPE*)0)->MEMBER)
获取成员MEMBER
的地址, 通常我们 拿这个地址值减去整个结构体的起始地址即可得出MEMBER
的偏移地址 , 但因为现在 结构体的起始地址 为0
(这个0
就是整个宏定义的精华所在), 所以获取的地址即为实际的偏移地址(减去0
等于没减嘛)
小白白白白
answered 10 years, 3 months ago