用一个宏定义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类型