当前位置:  技术问答>linux和unix

问一个list_entry的问题

    来源: 互联网  发布时间:2016-05-22

    本文导语:  我们知道 宏 list_entry定义为  #define list_entry(ptr, type, member)   ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))    其中type是对应的结构,member是这个结构中的一个成员,ptr是地址,它所指的类型和member相同。 ...

我们知道 宏 list_entry定义为 
#define list_entry(ptr, type, member)  
((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) 
 
其中type是对应的结构,member是这个结构中的一个成员,ptr是地址,它所指的类型和member相同。
它的含义是从一个结构的成员指针找到其容器的指针。
我不明白的是为什么要 (char *)(ptr),相关的解释是用(char*)ptr是为了计算字节偏移
我的疑问是因为ptr本身就是一个指针地址,有必要把它再强制转化成char *吗?难道我不能直接相减吗?

|
当然需要转换类型,否则ptr-1就减去了不止一个字节了

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 操作系统 iis7站长之家
  • 求 linux/list.h 部分解读list_entry()


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3