关于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)展开