获取结构体地址的偏移量:
- ①首先想到的方式当然是两个成员变量相减;
- ②另一种办法的思路:是将常量0转换为结构体指针的类型(c中0常量可以被转换为任意结构体的指针),然后访问这个指针的某一个成员变量,这个部分是非法的,因为相当于是访问一个空指针,但是如果再在前面加上&取地址符号,就是合法的(访问非法,取地址是可以的),而由于首地址是0,这样取出来的地址,就是偏移量;
#define OFFSET(TYPE, MEMBER) ((unsigned long)(&(((TYPE *)0)->MEMBER)))