#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
2015-03-29 14:38
323 查看
先分析一下这个 宏的运行机理:
一共4步
1. ( (TYPE *)0 ) 将零转型为TYPE类型指针;
2. ((TYPE *)0)->MEMBER 访问结构中的数据成员;
3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址;
4.(size_t)(&(((TYPE*)0)->MEMBER))结果转换类型。巧妙之处在于将0转 换成(TYPE*),结构以内存空间首地址0作为起始地址,则成员地址自然为偏移地址;
一共4步
1. ( (TYPE *)0 ) 将零转型为TYPE类型指针;
2. ((TYPE *)0)->MEMBER 访问结构中的数据成员;
3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址;
4.(size_t)(&(((TYPE*)0)->MEMBER))结果转换类型。巧妙之处在于将0转 换成(TYPE*),结构以内存空间首地址0作为起始地址,则成员地址自然为偏移地址;
相关文章推荐
- #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(s,m) (size_t)&(((s *)0)->m)
- 如何解释 #define OFFSET(struct_type, member) ((size_t) &((struct_type *) 0)->member)
- #define offsetof(TYPE, MEMBER) (size_t)(&(((TYPE*)0)->MEMBER))
- ((size_t) &((TYPE*)0)->MEMBER)
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
- 窗体Controls的OfType<>方法的使用
- qt 错误:request for member 'show' in 'showlist_ui', which is of non-class type 'ShowList*'
- (Android jni) error: base operand of '->' has non-pointer type '_JNIEnv'
- 理解vector<T>::size_type类型
- Error Log: type parameters of <T>T cannot be determined; no unique maximal instance exists for ...
- offsetofoffsetof(TYPE, MEMBER)
- CXF报错后,独立解决->unwinding now Response was of unexpected text/html ContentType.
- std::vector<std::string>::size_type和 int的区别
- 安卓JNI编程-- :error: base operand of '->' has non-pointer type '_JNIEnv' 解决办法
- left of '->GetStatus' must point to class/struct/union/generic type
- vector<string>::size_type与string::size_type
- #define list_entry(ptr, type, member) \ container_of(ptr, type, member)