c++::获取结构体中某 个成员相对结构体起始位置的偏移
我们使用宏offsetof,这个宏具体是什么?怎么用? 接下来我来详细说明:
在MSDN上是这样定义的:size_t offsetof( structName, memberName );
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。
- 上一篇:没有了
- 下一篇:没有了