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

关于linux中对宏container_of(ptr, type, member)定义的疑问?

    来源: 互联网  发布时间:2017-05-03

    本文导语:  对于这句:(type*)( (char*)__mptr - offsetof(type,member) ); 为什么要将__mptr先转换为char*类型呢?就算不转换,__mptr为head_list型指针也可以吧?因为__mptr仅仅是一个地址,用它来做一个减法运算,并不涉及取值操作,所以...

对于这句:(type*)( (char*)__mptr - offsetof(type,member) );
为什么要将__mptr先转换为char*类型呢?就算不转换,__mptr为head_list型指针也可以吧?因为__mptr仅仅是一个地址,用它来做一个减法运算,并不涉及取值操作,所以它是什么类型并没有什么关系!但是如果涉及到用 ' * ' 解除引用进行取值操作的话,那么__mptr是什么类型就有关系了!

|
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
后面这个宏算的是以字节为单位的偏移量,一个结构体中某成员相对于结构体起始地址的偏移。注意是以字节为单位。
而__mptr为struct list_head *类型。说简单点如int *pi和char* pch ,pi-1 和pch-1肯定是不一样的;向前移动的分别是sizeof(int)和sizeof(char)的大小。

    
 
 

您可能感兴趣的文章:

  • Linux内核的 container_of宏的疑问?
  • 菜鸟的Linux练习疑问……
  • Linux文件系统结构的疑问
  • Linux 初学者的疑问 (各位老鸟进来看看)
  • linux C编程中使用make时对 内部规则的疑问
  • 关于Linux内核的疑问
  • 关于linux runlevel的疑问
  • 由Turbo C 转入 Linux C的疑问
  • linux初学疑问
  • 关于LINUX下图形界面显示字符的疑问
  • linux不做嵌入式的,好找工作吗,疑问中!
  • 关于linux内核链表的疑问
  • 初次装linux前的疑问
  • mysql iis7站长之家
  • 阅读linux代码时候的一个小疑问,菜鸟问题,各位多提点,谢谢
  • 关于linux的文件系统的疑问
  • 关于linux内核中用i++不用++i的疑问
  • linux下的top命令疑问
  • 关于linux系统的时钟滴答疑问
  • 基于linux的router和switch的疑问
  • linux下gcc使用疑问?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux c malloc函数定义及用法详解
  • makefile 中定义的 -D_LINUX_和 LINUX有区别吗?
  • linux shell自定义函数(定义、返回值、变量作用域)介绍
  • Linux C 有没有 查看函数定义的方法?
  • LINUX 下自定义类型的问题
  • Linux中怎样挂载自定义的EXT3分区
  • 在linux下,如何查询系统的预定义变量?
  • 请问LINUX 下 _int64类型是怎么定义的啊
  • 请问linux下FILE结构在哪里有定义,
  • linux内核全局变量定义问题!
  • 最简单的问题,linux下怎么查看某个结构体的定义。
  • ★★★在linux下编译pro*c文件,提示"sqlcxt"没有定义,哪位高手帮忙,定赠分!
  • 请问linux下如何方便的找到数据类型的定义?
  • Linux中系统头文件的搜索路径定义在哪?
  • linux下Eclipse+CDT,如何查看函数的定义、声明
  • 求助Linux宏定义
  • linux内核源代码中,在哪个文件的哪个地方可以看到定义线程切换时间片大小?
  • redhat linux刚启动都有那些环境变量被定义了?
  • linux下类的成员函数不可以作为自定义的信号处理函数么?
  • linux怎样实现自定义指令"cd -n"
  • linux logrotate使用-自定义日志文件名
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


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

    ©2012-2021,