LIST_ENTRY(item, type, member)详解

2023-05-16

/*
 * @brief Obtain the pointer to a structure that contains a list.
 * @param item    [IN] Current node's pointer to the next node.
 * @param type    [IN] Structure name.
 * @param member  [IN] Member name of the list in the structure.
 */
#define LIST_ENTRY(item, type, member) \
    ((type *)(void *)((char *)(item) - OFF_SET_OF(type, member))) 

要理解以上宏定义,首先得弄清楚OFF_SET_OF(type, member)

/*
 * @brief Obtain the pointer to a list in a structure
 *
 * @param type    [IN] Structure name.
 * @param member  [IN] Member name of the list in the structure.
 */
#define OFF_SET_OF(type, member) ((size_t)&(((type *)0)->member))

也就是弄清楚  ((size_t)&(((type *)0)->member))  的意思,解释:

1、在0这个地址看做有一个虚拟的type类型的结构体变量,那么取这个结构体变量的成员,再取这个成员的地址,就是这个结构体变量中这个成员的偏移地址(由于结构体变量在地址为0的地方,所以这个成员在这个结构体中的绝对位置也是这个值),注意:实际编译器会自动优化,并不会去取这个成员,而是去取这个成员的地址。

2、所以这句话的意思就是获取一个结构体中一个成员在这个结构体中的偏移地址。

弄清楚了  OFF_SET_OF(type, member)  的意思就不难理解LIST_ENTRY(item, type, member) 了

1、item表示结构体类型type中member成员变量的绝对地址

2、结构体类型type首地址 = 结构体类型type中member成员的绝对地址 - 结构体类型type中member成员相对结构体类型type首地址的相对地址

3、也就是获取结构体类型type首地址的绝对地址

综上所述,list_entry表示在找出item指向的链表节点所在的type类型的结构体首地址,member是type类型结构体成员。

item:表示和member同为相同类型的链表,此处item表示指向链表中的一个节点

type:表示需要寻找的结构体类型。

member:表示type类型的结构体里面的成员。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LIST_ENTRY(item, type, member)详解 的相关文章

随机推荐

  • PooledByteBuf分配及回收之六PooledUnsafeDirectByteBuf初始化

    PooledByteBufAllocator初始化 PoolThreadCache初始化 PoolAerna初始化 PoolChunk初始化 PoolSubpage初始化 PooledUnsafeDirectByteBuf初始化 分配微小型
  • CubeMx工程增加FreeRtos支持

    对于stm32一些ram和flash相对大一些的mcu xff0c 增加一个实时操作系统 xff0c 会使程序控制更加灵活 本文阐述一下通过CubeMx自动添加FreeRtos的方法 xff0c 和使用visualgdb加载CubeMx生成
  • 整理leetcode刷题过程中遇到的常用库函数(c++)

    整理leetcode刷题过程中遇到的常用库函数 xff08 c 43 43 xff09 如果有额外的了解需求 xff0c 可以在微软c 43 43 库函数进行了解 以下按照我理解的刷题顺序整理 xff1a 数组 数组是刷题的开始 xff0c
  • s5pv210开发与学习:1.3之SD卡学习

    目录 拓展阅读 SD卡 内存 RAM 与外存 ROM 的区别 RAM random access memory 随机访问存储器 特点是任意字节读写 随机访问 xff0c 掉电丢失 ROM read only memory 只读存储器 用于存
  • RT-Thread 开发者能力认证考试样题(RCEA)

    V1 0 RT Thread 开发者能力认证考试样题 RCEA xff09 注 xff1a 样题仅为部分题目 第一小卷 单选题 40 题 40 分钟 40 0 分 1 对两个字符 a 和 b 进行初始化 xff1a char a 61 34
  • Android开发中为什么有些变量会以m开头

    平常在看Android代码和看别人敲代码的时候经常看到有些变量会以m开头 xff0c 这到底是什么样的命名规则呢 xff1f 首先看官网的答案 xff1a Follow Field Naming Conventions Non public
  • Ubuntu 串口设备 USB tty

    Ubuntu 串口设备 USB tty 概述USB查看详细信息 概述 研究Ubuntu下串口设备的连接 xff0c 简单的讲就是看有没有连接上 xff0c 至于使用后面再说 USB 使用命令如下可以查看USB接口的信息 xff0c dmes
  • Nooploop UWB LinkTrack ROS下配置

    Nooploop LinkTrack ROS 1 概述2 ROS下配置3 ROS系统安装4 串行库安装 5 ROS包的配置5 1 找不到libserial so文件5 2 解决办法 6 消息格式7 参考8 延伸阅读传感器配置节点程序分析经典
  • 相机标定之使用Kalibr工具箱

    相机标定之使用Kalibr工具箱 1 概述2 准备3 步骤4 参考链接5 相关链接 1 概述 简单介绍如何使用Kalibr工具箱进行针孔模型相机标定的步骤 xff0c 供自己以后参考 xff0c 同时希望给大家带来帮助 2 准备 提前准备好
  • 机器人学中的状态估计学习笔记(一)第二章 概率论基础

    机器人学中的状态估计学习笔记 xff08 一 xff09 第二章 概率论基础 2 1 概率密度函数2 1 1 定义2 1 2 贝叶斯公式及推断2 1 3 矩2 1 5 统计独立性和不相关性2 1 6 归一化积 2 2 高斯概率密度函数2 2
  • 机器人学中的状态估计学习笔记(二)第三章线性高斯系统的状态估计

    机器人学中的状态估计学习笔记 xff08 二 xff09 第三章线性高斯系统的状态估计 3 1 离散时间的批量估计问题3 1 1 问题定义3 1 2 最大后验估计3 1 3 贝叶斯推断3 1 4 存在性 唯一性与能观性情况1 xff1a 有
  • PooledByteBuf分配及回收之十PoolChunkList源码解析

    PooledByteBufAllocator初始化 PoolThreadCache初始化 PoolAerna初始化 PoolChunk初始化 PoolSubpage初始化 PooledUnsafeDirectByteBuf初始化 分配微小型
  • 机器人学中的状态估计学习笔记(三)第四章 非线性非高斯系统的状态估计

    机器人学中的状态估计学习笔记 xff08 三 xff09 第四章 非线性非高斯系统的状态估计 4 1 引言4 2 离散时间的递归估计问题4 3 离散时间的批量估计问题 4 1 引言 本小节主要是从一个简化的 一维度的非线性状态估计问题 估计
  • Camera-IMU联合标定原理

    Camera IMU联合标定原理 一 相机投影模型二 IMU 模型三 Camera IMU标定模型 一 相机 IMU旋转 二 相机 IMU平移 三 视觉惯性代价函数 四 camera imu联合标定 一 粗略估计camera与imu之间时间
  • 里程计及基于双目视觉的视觉里程计(stereo visual odometry)

    里程计在slam算法中扮演的作用不言而喻 xff0c 通常里程计可以分为轮子编码器的里程计 wheel odometry 和视觉里程计 visual odometry 而视觉里程计又可分为基于单目的视觉里程计 monocular odome
  • WIN7镜像中增加USB3.0驱动和语言包

    原版的win7镜像没有集成USB3 0的驱动 xff0c 如今的电脑主板基本是XHCI主控 xff08 以前是EHCI的 xff09 xff0c 这一变动导致在安装Win7的过程中会出现USB接口全部失灵的状况 xff0c 所以在安装时无法
  • Linux静态库与动态库示例之hello world

    Linux静态库与动态库示例之hello world 1 Linux动态库与静态库的基本概念 linux下有两种库 动态库和静态库 共享库 xff0c 二者的不同点在于代码被载入的时刻不同 静态库的代码在编译过程中已经被载入可执行程序 因此
  • 卡尔曼滤波原理及其在RSSI测距中的应用

    nbsp nbsp nbsp nbsp 卡尔曼滤波 Kalman filter 是一种高效的自回归滤波器 它能在存在诸多不确定性情况的组合信息中估计动态系统的状态 是一种强大的 通用性极强的工具 它的提出者 鲁道夫 E 卡尔曼 在一次访问N
  • cmakelist基本语法

    一 几个基本概念 xff1a 1 GCC a 由GUN 开发的编译器 支持C C 43 43 Java等语言 b 项目简单时 可以使用gcc g 43 43 来进行编译 c 项目复杂时 只使用gcc来进行编译会变得非常复杂 2 make a
  • LIST_ENTRY(item, type, member)详解

    64 brief Obtain the pointer to a structure that contains a list 64 param item IN Current node 39 s pointer to the next n