将0强转为指针的一种用法
来源:互联网 发布:逆战神枪手源码 编辑:程序博客网 时间:2024/05/16 19:23
写程序,有时为了方便,需要将0强转为指针,进行操作, 其中一种用法,为用来获取某个成员在对象中的offset, 以方便后续的其它操作
例子:
typedef struct
{
int id;
int age;
}people;
//根据 对象中的某一个成员(element)获取其在对象中的偏移
#define offset(obj, element) (long)(&((obj*)0)->element)
//根据对象中某个成员的地址, 获取其对应对象的地址
#define GET_OBJ_FORM_ELEMENT(p_element,obj,element) ((obj*)((char *)(p_element) - (long)(&((obj *)0)->element)))
int main()
{
people* lili = new people;
lili->_id = 1;
lili->_age = 23;
int offs = offset(people, _age);
cout << offs <<endl;
people* hanmeimei = GET_OBJ_FORM_ELEMENT(&(lili->_age), people, _age);
cout << hanmeimei->_id << " " <<hanmeimei->_age <<endl;
return 0;
}
输出结果: 4
1 23
工作中的一个应用:
DLINK 为一个双循环链表的头指针
任何定义的结构 struct 只要把DLINK作为其一个成员,即可将多个struct 串成双链表(通过操作DLINK),而不需要为每种struct都自己定义prev & next指针来串成链表,方便做到扩展。 同时还可根据&DLINK, 来获取其对应的对象的指针。操作双链表时,也是通过DLINK来操作。一般将DLINK作为对象的第一个成员。
- 将0强转为指针的一种用法
- 0强转为指针的用处
- 将char*强转为 char**
- 关于指针的一种用法
- 函数指针的一种用法
- 指向指针的指针的一种用法
- 一种将数据表DataTable转为JSON格式的新方法
- sp<> 强指针类的用法
- sp<> 强指针类的用法
- sp<> 强指针类的用法
- sp<> 强指针类的用法
- sp<>强指针类的用法
- sp<> 强指针类的用法
- sp<> 强指针类的用法
- sp<> 强指针类的用法
- const指针强转为非const指针后的赋值问题
- java web 将http 强转为https
- [Android]智能指针用法(SP强指针WP弱指针)
- ubuntu12.04 mount NFS共享出现有坏的超级块解决方案
- FZU1911-Construct a Matrix(矩阵快速幂+规律)
- 委托事例(只适用于初学者)
- 优雅的android数据库编程
- myeclipse控制台日志显示宽度设置
- 将0强转为指针的一种用法
- SRAM Controller
- 年内最奇怪科技产品:三星耳机可变身为项链
- 黑马程序员_Java 高新技术(2)
- 定制餐饮美食简单点点app,提高餐饮店在市场的竞争力
- java堆栈 (转)
- 源码方式向openssl中添加新算法完整详细步骤(示例:摘要算法SM3)【非engine方式】
- 让陌生人为你传递短信 又一个奇葩消息应用诞生
- 解决如何监听Activity切换