入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

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

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

我们使用宏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)下面我来给出一个测试的代码:

    

  



声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像