#include <iostream> #define IOFFSETOF(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) using namespace std; int main(){ struct Demo{
char sex;
int id;
}; cout << "IOFFSETOF(Demo, sex): " << IOFFSETOF(Demo, sex) << endl;
cout << "IOFFSETOF(Demo, id): " << IOFFSETOF(Demo, id) << endl;
return ;
}
输出:
#define IOFFSETOF(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
1.(TYPE*)0 将0强转为TYPE类型的指针,此时0作为一个匿名结构体的的起始地址。
2.(TYPE*)0->MEMBER 指向结构体中的MEMBER成员。
3.&((TYPE*)0->MEMBER) 获取MEMBER成员在结构体的地址,因为起始为0,所以获取的地址为相对偏移地址。
结论:这个宏用于获取结构体中某个数据成员MEMBER在结构体中相对偏移地址。