#include <iostream>
#include <assert.h>
#include <algorithm>
#include <hash_set>
#include <vector>
#include <assert.h>
using namespace std;
struct AA
{
char ch;
double d;
int a;
};
#define OFFSET(Type,Field) (size_t)&( ((Type*)0)->Field)
#define OFFSET2(Type,Field) (size_t)( (char *)&(((Type*)0)->Field) - (char*)0)
int main()
{
AA aaa;
int i= (char*)(&aaa.a)-(char*)(&aaa);
int d =(char*)(&aaa.d) -(char*)(&aaa);
int c = (char*)(&aaa.ch)-(char*)(&aaa);
cout<<"int a: "<<i<<endl<<" char ch: "<<c<<endl<<" double d: "<<d<<endl;
cout<<OFFSET(AA,a)<<" "<<OFFSET(AA,ch)<<" "<<OFFSET(AA,d)<<endl;
cout<<OFFSET2(AA,a)<<" "<<OFFSET2(AA,ch)<<" "<<OFFSET2(AA,d)<<endl;
return 0;
}
结构体求某个field的地址偏移