您的位置:首页 > 其它

结构体计算某个field的地址偏移

2012-12-02 12:05 253 查看
#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的地址偏移

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: