#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
2016-03-31 11:33
253 查看
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
宏的运行机理:
1. ( (TYPE *)0 ) 将零转型为TYPE类型指针;
2. ((TYPE *)0)->MEMBER 访问结构中的数据成员;
3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址;
4.(size_t)(&(((TYPE*)0)->MEMBER))结果转换类型。巧妙之处在于将0转 换成(TYPE*),结构以内存空间首地址0作为起始地址,则成员地址自然为偏移地址;
宏的运行机理:
1. ( (TYPE *)0 ) 将零转型为TYPE类型指针;
2. ((TYPE *)0)->MEMBER 访问结构中的数据成员;
3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址;
4.(size_t)(&(((TYPE*)0)->MEMBER))结果转换类型。巧妙之处在于将0转 换成(TYPE*),结构以内存空间首地址0作为起始地址,则成员地址自然为偏移地址;
相关文章推荐
- F(N)---hdu2802(寻找循环节)
- pip安装使用详解
- Fortran 当数组大小不一样时,会出现什么情况。
- 一个自定义的ActionSheet,可以自已轻松修改上面的东西
- 通过系统广播,获得apk的packageName以后,如何仅通过packageName获取其他信息
- 监控网络类型变化WIFI 3g
- 标签传播算法(Label Propagation)及Python实现
- android对list对象中的string字符串进行排序
- Linear Regression
- 一棵二叉树是否为另一棵二叉树的子树
- SDK Location not found Android Studio + Gradle
- 如何检测一个aspx页面的速度慢的原因
- Bitmap 传值
- android CoordinatorLayout与滚动的处理
- struts2中怎样动态指定执行方法
- html meta标签
- Kafka消息的可靠性测试--针对来疯直播业务的方案选择
- git 命令错误记录
- svn命令中文教程
- 第三章学习笔记