您的位置:首页 > 其它

如何解释 #define FIND(struc, e) (size_t) &(((struc*) 0)->e)

2012-08-29 10:16 597 查看
用一个宏定义FIND求一个结构体struc里某个变量相对struc的偏移量。

struct struc

{

int a;

char b[20];

double ccc;

};

则 struc student

FIND(student,a);//等于0

FIND(student,b);//等于4

答案:#define FIND(struc, e) (size_t) &(((struc*) 0)->e)

解释如下:

(struct *) 0

把一段地址看作struc,

((struc *) 0)->e

指向它的成员e

&(((struc*) 0)->e)

取这个成员的地址,因为该结构体的首地址为0,所以就得到成员e距离结构体首地址的偏移量。

(size_t) &(((struc*) 0)->e)

把地址硬转为size_t类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐