contatiner_of宏
来源:互联网 发布:国家地震数据共享中心 编辑:程序博客网 时间:2024/06/03 22:59
这个宏返回的就是指向整个结构体变量的指针,类型是(type*)
用结构体某个元素的地址得到这个结构体的首地址
ptr是指向结构体元素member的指针,type是结构体类型,member是结构体中一个元素的元素名
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) * __mptr = (ptr);\(type *)((char *)__mptr - offsetof(type, member)); })
1、(type *)0 将0地址的指针强制转换为type类型
2、((type *)0)->member 指向该地址的元素
3、typeof(((type *)0)->member) typeof的作用是获得元素的类型,此处作用是获得该元素的类型,const的是设置内容不可变,此处作用是指针指向的内容不可变
4、typeof(((type *)0)->member) * __mptr = (ptr) 因为传入的指针不能传入它的类型,所以通过这些步骤获取指针类型,ptr只是地址值没有类型;
5、(type *)((char *)__mptr - offsetof(type, member)) offsetof宏作用是得到该元素对于首地址的偏移量,该元素的地址 - 偏移量,返回该结构体的首地址
阅读全文
0 0
- contatiner_of宏
- 宏
- 宏
- ##宏
- 宏
- 宏
- 宏
- 宏
- 宏
- 宏
- 宏
- 宏
- 宏
- 宏
- 宏
- 宏
- 宏
- 宏
- 分享大家的编程路程
- 《android framework常用api源码分析》之Activity启动流程
- 2017-12-14
- 在python3中,Tkinter中弹出菜单案例
- 慕课系列
- contatiner_of宏
- 为什么不建议将 font-size 设置为 12px 以下?如果一定要设置为 12px 以下要怎么做?
- mysql 索引
- php7.*连接mssql数据库,使用PDO连接,同时兼容windows和centos
- 字符串时间实现使用Date类型的函数思路
- react配置antd的按需加载。
- freemarker的时间相关
- linux0.11内核完全剖析
- 标准库std::min/std::max与min/max宏冲突