#define OFFSET(struc, m) (size_t)(&(((struc*)0)->m))
2014-07-23 16:06
429 查看
#include <iostream> #include <stdio.h> using namespace std; #define OFFSET(struc, m) (size_t)(&(((struc*)0)->m)) struct MyStruct { MyStruct() { a = 0; b = 'a'; c = 0.0f; } int a; float c; char b; }; void main() { cout << OFFSET(MyStruct, a) << endl; }
(s *)0 是骗编译器说有一个指向类(或结构)s的指针,其值0
&((s *)0)->m 是要取得类s中成员变量m的地址
由于这个类的基址为0,这时m的地址当然就是m在s中的偏移了
相关文章推荐
- 如何解释 #define FIND(struc, e) (size_t) &(((struc*) 0)->e)
- 如何解释 #define OFFSET(struct_type, member) ((size_t) &((struct_type *) 0)->member)
- #define FIND(struc,e) (size_t)&(((struc*)0)->e)
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER);
- #define offsetof(s,m) (size_t)&(((s *)0)->m)
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
- #define offsetof(s,m) (size_t)&(((s *)0)->m)
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
- #define offsetof(TYPE, MEMBER) (size_t)(&(((TYPE*)0)->MEMBER))
- (size_t)&(((s*)0)->m) 的理解
- (size_t) & ((struct element *) 0) -> member
- 理解vector<T>::size_type类型
- 关于layout()->setSizeConstraint(QLayout::SetFixedSize)的问题
- Android中设置字体大小出现的问题(操作位置:Settings->Display->Font size)
- vector<string>::size_type与string::size_type
- spfile 、pfile、db启动顺序 SQL> show parameter db_recovery_file_dest_size; SQL> show parameter spfile
- matlab中 ndims(a)、size(a)、length(a)的区别<转载>
- Windows7环境下简单安装Appache 2.2 和 PHP5(SSLSessionCache: Invalid argument: size has to be >= 8192 bytes )
- #define offsetof(STRUCTURE,FIELD) ((int)((char*)&((STRUCTURE*)0)->FIELD))