news 2026/6/23 4:18:53

offsetof 宏的实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
offsetof 宏的实现

1、offsetof的介绍

offsetof宏用于获取结构体中某个成员相对于结构体起始地址的偏移量。它接受结构体类型和成员作为参数,返回一个无符号整型值。这个宏在C语言中非常有用,特别是在处理复杂数据结构时。

2、offsetof宏的定义

标准库中的offsetof宏定义如下:

#include <stddef.h>
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

2.1offsetof(TYPE, MEMBER)的说明

1.TYPE: 表示结构体或联合体的类型名。

2.MEMBER: 表示结构体(或联合体)中需要计算偏移量的成员名称。

2.2((size_t) &((TYPE *)0)->MEMBER)的详细说明

1.(TYPE*)先将0转换为一个结构体类型的指针,相当于某个结构体的首地址是0。此时,每一个成员的偏移量就成了相对0的偏移量,这样就不需要减去首地址了。

2.&((TYPE *)0)->MEMBER对该指针用->访问其成员,并取出地址,由于结构体起始地址为0,此时成员偏移量直接相当于对0的偏移量,所以得到的值直接就是对首地址的偏移量。

3.((size_t) &((TYPE *)0)->MEMBER)取出该成员的地址,强转成size_t并打印,就求出了这个偏移量。(size_t)代表无符号整数。

3、offsetof宏的使用

offsetof宏用于计算结构体Stu中成员acd相对于结构体起始地址的偏移量。

4、offsetof宏的模拟实现

5、使用注意事项

1.仅适用于结构体和联合体offsetof宏不能用于普通变量、数组或非聚合类型。

2.编译时计算offsetof宏是在编译时计算偏移量的,因此不能用于运行时动态生成的结构体类型或成员名。

3.不涉及内存访问:虽然宏的表达式看起来像在访问内存,但实际上并没有发生真正的内存访问,因为所使用的指针指向的是未分配的地址。

附图:

志同道合之人支持一下,点点赞!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 0:22:35

vsftpd 安装、升级、配置全流程总结(含问题解决方案)

一、遇到的核心问题总结在离线环境中&#xff0c;主要遇到以下问题&#xff1a;安装路径非默认&#xff1a;源码编译后 vsftpd 默认安装到/usr/local/sbin/vsftpd&#xff08;而非/usr/sbin/&#xff09;&#xff0c;导致服务文件ExecStart路径不匹配&#xff0c;启动失败&…

作者头像 李华
网站建设 2026/6/22 18:48:21

HunyuanVideo-Foley部署:本地与云端GPU实战

HunyuanVideo-Foley部署&#xff1a;本地与云端GPU实战 在智能家居设备日益复杂的今天&#xff0c;确保无线连接的稳定性已成为一大设计挑战。蓝牙技术虽已发展至5.0版本&#xff0c;但实际应用中仍面临功耗、干扰和兼容性等问题。尤其在多设备共存的环境中&#xff0c;如何实现…

作者头像 李华
网站建设 2026/6/23 16:22:51

LangChain工具使用:简化AI函数调用

本章对应源代码&#xff1a;https://github.com/RealKai42/langchainjs-juejin/blob/main/lc-tools.ipynb 上一节中&#xff0c;我们学习了如何直接使用 openAI 的原生 API 去使用 function calling &#xff08;tools&#xff09;功能&#xff0c;需要自己维护历史、写参数类…

作者头像 李华
网站建设 2026/6/23 2:40:29

Docker 镜像打包为 tar 并在其他环境加载运行(离线部署实战指南)

Docker 镜像打包为 tar 并在其他环境加载运行&#xff08;离线部署实战指南&#xff09;适用场景&#xff1a;内网部署 / 无法访问 Docker Hub / 生产环境离线交付 阅读目标&#xff1a;掌握 Docker 镜像打包、传输、加载、运行的完整闭环一、为什么需要把 Docker 镜像打包成 t…

作者头像 李华
网站建设 2026/6/23 16:24:56

Docker 镜像体积优化实战:从 1GB 到 100MB

Docker 镜像体积优化实战&#xff1a;从 1GB 到 100MB适用人群&#xff1a;已经使用 Docker&#xff0c;有镜像体积焦虑的开发者 / 运维工程师 阅读目标&#xff1a;掌握 一套可复用的镜像瘦身方法论&#xff0c;而不是零散技巧一、为什么 Docker 镜像会变得这么大&#xff1f;…

作者头像 李华
网站建设 2026/6/23 14:43:37

LobeChat能否分配任务?团队协作智能调度

LobeChat能否分配任务&#xff1f;团队协作智能调度 在现代企业中&#xff0c;一个常见的场景是&#xff1a;产品经理在群里说“帮我把昨天会议里的三个需求整理成文档”&#xff0c;接着有人手动打开 Notion&#xff0c;翻找聊天记录&#xff0c;复制粘贴、重新组织语言——整…

作者头像 李华