解释如下:
(struct_type *) 0
把一段地址看作struct_type;
(struct_type *) 0)->member
指向它的member成员
&((struct_type *) 0)->member
取这个成员的地址
(size_t) &((struct_type *) 0)->member
把地址硬转为size_t类型
测试代码如下:
- typedef struct{
- int x;
- int y;
- int z;
- }Index_t;
- typedef struct{
- int y;
- Index_t Index1;
- int z;
- Index_t Index2;
- }Index2_t;
- #define OFFSET(struct_type, member) ((size_t) &((struct_type *) 0)->member)
- printf("OFFSET Index2_t=%d/n",OFFSET(Index2_t,Index2));
参考链接:
http://bbs.chinaunix.net/thread-1710274-1-1.html