linux下/usr/include/slang.h对offsetof这个宏定义如下:
# define offsetof(T,F) ((unsigned int)((char *)&((T *)0L)->F - (char *)0L))
(T*)0L是骗编译器说有一个指向结构体type的指针,地址值是0。->优先级比&高,&((T*)->0L)->F是取成员F的地址,至于char*强制将地址转换为char的指针,是因为char是一字节的,与(char*)0L相减即是成员F距离首地址的字节数,强制转换成unsigned int,即返回结果是无符号整型的