牛骨文教育服务平台(让学习变的简单)
博文笔记

c++::获取结构体中某 个成员相对结构体起始位置的偏移

创建时间:2016-12-17 投稿人: 浏览次数:2065

我们使用宏offsetof,这个宏具体是什么?怎么用? 接下来我来详细说明:

    在MSDN上是这样定义的:size_t offsetof( structNamememberName );  

    1)第一个参数是结构体的名字,第二个参数是结构体成员的名字

    2)该宏返回结构体中成员的偏移量,返回值是size_t 类型的

1)我们这里为了方便,给出offsetof的参数是s,m,即offsetof(s,m), 2)我们怎么具体使用呢: 可以这样定义:#define offsetof(s,m) (size_t)
#include<iostream>
using namespace std;
#define offsetof(s,m) (size_t) &(((s*)0)->m)
struct N
{
	int i;
	char j;
	double k; 
};
int main()
{
	cout<<offsetof(N,j)<<endl;
	return 0;
}

&(((s*)0)->m) 3)到这里很多同学肯定有疑问,别着急,我来解析下这个式子:   (s*)0:是骗编译器说有一个指向类(或者结构体)s的指针,它的值是0    &(((s*)0)->m)这个是取结构体中s的成员m    由于这个类的基址是0,这时m的地址当然就是其在结构体中的偏移地址喽 4)下面我来给出一个测试的代码:

    

  



声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。