关于C或者C++的问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 11:27:36
有一句语言
#define offset of(TYPE,MEMBER)((size_t)&((TYPE*)0)->MEMBER)
不知道什么意思
麻烦高手解释一下

这个计算结构体中每个元素相对于结构体首地址的偏移量
#define offsetof(TYPE,MEMBER) ((size_t)&((TYPE*)0)->MEMBER)
要注意空格的位置,楼主的空格位置不对

typedef struct _t
{
int id;//学号
int age;//年龄
char name[16];//姓名
} STUDENT;

size_t offset;
offset = offsetof(STUDENT, id);//0
offset = offsetof(STUDENT, age);//sizeof(int)
offset = offsetof(STUDENT, name);//2*sizeof(int)

定义这个宏是为了方便应用到任意的结构体,一般求偏移量是像下面这样用:
STUDENT student;
offset = (char*)&student->id - (char*)&student;
offset = (char*)&student->age - (char*)&student;
offset = (char*)&student->name - (char*)&student;

#define offsetof(TYPE,MEMBER) ((size_t)&((TYPE*)0)->MEMBER)

意思就是用offsetof(TYPE,MEMBER)来代替((size_t)&((TYPE*)0)->MEMBER)
其中TYPE,MEMBER是变量或看作是参数
其实就是定义一个宏,编译的时候会按照你定义的内容把offsetof(TYPE,MEMBER)用((size_t)&((TYPE*)0)->MEMBER)展开