加载中…
正文 字体大小:

&(int*)0 / &((type*)0)->member 记录一下

(2013-03-26 14:50:36)
标签:

&(int)0

int

0

type

&

分类: c/cpp
最近有同学在 ricabin https://github.com/wxm7075/ricabin 框架上疑问:

https://github.com/wxm7075/ricabin/blob/remotes/baselibc/hc_utils/inc/hc_list.h

#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* 类型。
一个指向 NULLtype* 类型 指针 和 这里的 (type*)0 是等价的(ansi/iso-c99 标准规定 NULL 指针为 0x00000000, 即内存中的“第 0 号地址”)。


到这里,大家应该可以明白,上面的 list_entry 的意思了吧? 这个是 unix / linux 里有 _list.h 文件的。



0

阅读 评论 收藏 转载 喜欢 打印举报
已投稿到:
后一篇:DDoS攻击
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    后一篇 >DDoS攻击
      

    新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有