linux宏offset_of学习随笔
offset_of 宏
定义:include/linux/stddfx.h
功能:给出两个参数:结构体和它的成员,获取其成员关于结构体首地址的偏移:
#define offset_of(type, member) (unsigned long) &((type*)0)->member
这个想法挺精巧的,逐层拆开,首先看里面的(type*)0 ,这是将0地址强行转换为了一个type结构体的指针。在这里我们先假设一个结构体:
typedef struct student{ char name[16]; int num; int age; }
对于这样的一个结构体,使用offset_of(type,member)时,会写成offset_of(student,num)这样的格式。
第二层,((type*)0)-> member ,这里要注意结合的顺序。这一层强转指针后,访问结构体的成员member。 放在例子里就是 ((student*)0)->num 即student->num
第三层,&((type*)0)-> member,这里已经是取巧了。利用了0地址。式子应该被理解成
&( ((type*)0)-> member ) ,即&(student->num)由于起始地址是零地址,这样就能直接求出偏移量。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具