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

这个代码不太懂,大虾们刚忙了

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

    本文导语:  #define ylist_entry(entry, type, member)  ((type *)((char *)(entry)-(unsigned long)(&((type *)NULL)->member))) obj = ylist_entry(lh, yaffs_Object, hashLink); yaffs_Object,hashLink都是结构体。 上面那个代码帮我解释一下。谢谢。 我只是被那么...

#define ylist_entry(entry, type, member) 
((type *)((char *)(entry)-(unsigned long)(&((type *)NULL)->member)))

obj = ylist_entry(lh, yaffs_Object, hashLink);

yaffs_Object,hashLink都是结构体。

上面那个代码帮我解释一下。谢谢。 我只是被那么多括号弄晕了。 结构体里面的具体内容可以不关注。

|
lh是一个指向yaffs_object结构体变量的成员hashLink的指针。

&((type *)NULL)->member))

NULL作为type的指针,那么&((type *)NULL)->member))之际就是member在type结构体内部的偏移量。


然后把它转换为unsigned long.

entry是指向member的指针,那么entry减去member的偏移量,最后的结果就是这个结构体的入口地址,

即是这个结构体的指针。


那么结合你的例子,就是这样的:

lh是指向yaff_object结构体变量的中member成员的指针。

先找到hashLink在结构体yaffs_object变量内部的偏移量,

然后用lh这个指针的值减去member在内部的偏移量,就是yaffs_object结构体变量的地址。


说白了,就是这个道理:通过一个成员指针,来过的包含这个成员的结构体变量这个容器的指针。


用C++的思想来说,就是通过一个对象的成员的指针,来获得这个对象的地址。





    
 
 

您可能感兴趣的文章:

  • 初学者求救!!哪位大虾给点源代码?
  • 各位大虾,正规的伪代码怎么写啊?有什么一定要遵守的规则么?
  • 代码实现Radius服务模拟的问题,熟悉Radius服务的大虾请进!
  • 那位大虾有AWT的滚动条的代码,一百分求救。
  • 就这么多分了,全部奉献,那位大虾有论坛的主贴和跟贴的顺序的算法源代码?
  • 一段简单的数据库调用代码!请大虾帮忙看看!!
  • 在网络数据传输中,为了降低数据传输量,用哪种算法最好,有哪位大虾帮忙吗?最好有JAVA源代码
  • 求助!!关于两行代码的理解问题!请大虾近来看看!!(在线等待)
  • 一个简单的代码问题,请大虾进来帮帮忙!急!
  • 关于网页代码包含的简单问题!!请大虾看一下!!
  • 请教各位大虾。在linux下可有类似Win API中的核心代码段的函数?或方法??????
  • 我是菜鸟妹妹,那位大虾有用JAVA 开发的圆饼图和直方图的源代码?我只有21分都给你,够有诚意的吧。我急用(RUBY)。
  • 哪位大虾帮我把这个代码变为汉字啊!!急!!好像是UTF-8
  • 求助!!关于两行代码的理解问题!请大虾近来看看!!
  • 我是初学者,tcpdump的源代码看起来比较困难,请有经验的大虾指点一二
  • 父进程sleep(10) 秒,但不需要子进程执行这句代码,怎么办,求大虾指导
  • 请教大虾,在Rose中怎么生成JAVA代码倒出?
  • 各位大虾,我现在再用SA(System Architect)做项目设计,有谁知道怎样用SA将Java源代码倒成类图?
  • 我用java做的applet站内搜索程序,不能搜索中文,那位大虾能帮帮我?代码如下:
  • javabean 编辑出错不会修改了.请大虾指教 代码如下:
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • javascript 添加到收藏夹和书签代码示例
  • 在JBuilder中,为什么编写的代码中,当代码出现关键字时,后面的部分代码就移位了,当在有关键字的那些代码行进行选择时,也会出现鼠标位
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • 为什么两行代码间不加入其他代码就崩溃,而加入了日志代码后就不崩溃?
  • JSP中清空cookie代码参考
  • 在ubuntu8.10 新立得中安装anjuta,为什么没有代码提示功能,怎么做才有,还有自动代码补全和代码提示有什么区别,
  • Python获取网页编码的方法及示例代码
  • 到底怎么样的代码算是有效代码?请教了。。
  • HTML网页中的html body onload自动跳转方法介绍及自动跳转代码示例
  • 如果要研究源代码以提高自己,哪一个开放源代码的软件比较合适?
  • php通过socket_bind()设置IP地址代码示例
  • linux源代码的时间函数源代码
  • boost库lexical_cast不同用法代码参考
  • gdb的时候代码 next显示的代码乱了
  • 通过javascript库JQuery实现页面跳转功能代码
  • 源代码!源代码!
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • 哪位会使用代码保护工具WingGuard来保护java代码?
  • HTML网页的Meta Refresh自动跳转方法介绍及Meta Refresh自动跳转代码示例
  • 如何得到C语言代码对应的汇编代码?
  • Linux c++虚函数(virtual function)简单用法示例代码
  • RedHat Linux是开放源代码的吗?如何能看见它的源代码,如何进行修改?


  • 站内导航:


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

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

    浙ICP备11055608号-3