目录
#define MY_OFFEST(type,arg) (int)&(((type*)0)->arg)
结构体
1.怎么计算结构体各个成员的偏移量
struct Node
{
char a;
short b;
int c;
float d;
double f;
long long int l;
};
方法一:通过定义结构体变量求偏移量
int main()
{
struct Node tmp;
int dist = ((char*)&(tmp.d) - (char*)&tmp);//指针-指针 求d的偏移量
printf("%d\n", dist);
return 0;
}
方法二:不定义结构体变量求偏移量
定义了一个指针指向0,指针类型为Node*,通过->访问里边的成员,再取其地址。此时左边的类型为int,右边类型为float*类型将其强转为int类型(假设开始地址从0开始)
int main()
{
int dist = (int)&(((struct Node*)0)->d);//假设开始地址从0开始 0地址强转为Node*指针类型 指向d
printf("%d\n", dist);
return 0;
}