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

来源:互联网 发布:阿里云cdn怎么关闭 编辑:程序博客网 时间:2024/06/08 00:55

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

【offsetof的定义】:

    在MSDN上是这样定义的:size_t offsetof( structName, memberName );  

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

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

【offsetof的使用】:

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

    

  



0 0
原创粉丝点击