#define rt_list_entry(node, type, member) \ ((ob_int*)((char *)(node) - (unsigned long)(&((type *)0)

#define list_entry(ptr, type, member) 
((type*)((char*)(ptr)-(unsigned long)(&((type*)0)->member)))

的作用、功能。

该方法就是 通过 type类型结构体 的 成员变量 member 的地址 去获取 该结构体的地址。。
而 (unsigned long)(&((type*)0)->member) type类型结构体 中 成员变量 member 的地址在该结构体中的偏移量。。

我把问题简化一下。 (type*)0 的作用、功能。

C语言中 (type*)X 表示将操作 X 强制类型转换为 type* 类型(即 type* 类型指针)。
这里是将 0 强制类型转换为 type* 类型, 0 成为 type* 类型。
一个指向 NULL 的 type* 类型 指针 和 这里的 (type*)0 是等价的(ansi/iso-c99 标准规定 NULL 指针为 0x00000000, 即内存中的“第 0 号地址”)。

到这里,大家应该可以明白,上面的 list_entry 的意思了吧? 这个是 unix / linux 里有 _list.h 文件的。
————————————————
版权声明:本文为CSDN博主「Mr.Liuqh」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MrLiuqh/article/details/89316662

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值