栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux内核链表(宏)---计算结构体首地址

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux内核链表(宏)---计算结构体首地址

计算结构体内的成员所处的结构体的首地址

计算结构体成员在结构体内的地址编号(偏移值或差值)
type结构体名,mem结构体里某个成员名
结构体指针:(type*)0
结构体指针访问成员:((type*)0)->mem,拿到了里面的成员变量
加&是变为地址编号&((type*)0)->mem,此时为16进制
但是我们想要值,所以强转
变为整数值:(long)&((type*)0)->mem
注意:32位为int,64位为long

#define offset(type,mem) ((long)&((type*)0)->mem)

node为节点指针,type结构体名,mem结构体里某个成员名
node为成员地址 - offset为偏移值
节点地址:node
指针:(void*)node,(void*)也可以(char*)他们两个每次解引用都是一个字节
重新转换为type类型指针:(type*)((void*)node - offset),因为要访问的是结构体指针
最后外面套括号是对整个式子的保护

#define node_to_obj(node,type,mem) 
	((type*)((void*)node - offset(type,mem)))
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345654.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号