计算结构体偏移量的函数多描述如下:
#define offsetof(s,m) (size_t)&(((s *)0)->m)
// Microsoft x86 compiler (version 7)
#define offsetof(s,m) (size_t)(unsigned long)&(((s *)0)->m)
// Diab Coldfire compiler
#define offsetof(s,memb) ((size_t)((char *)&((s *)0)->memb-(char *)0))
在这里让人迷惑的主要就是0这个数字,其实在这里就是一个编程技巧,将0地址映射成结构体s类型,我们并不会修改这一区域,仅用来取偏移量。如果从0地址开始的结构体,那么m的地址就是成员m的偏移量。
这些用法多数出自C语言,要想用明白一种语言,还需要练习呀。