news 2026/6/11 2:13:29

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/10 6:43:21

Ascend C大词表Embedding Lookup算子深度优化实战

历经多年异构计算研发&#xff0c;我深刻体会到&#xff1a;“真正的Embedding性能瓶颈不在计算&#xff0c;而在内存墙”。本文将带你穿透大词表Embedding的内存访问模式与达芬奇架构的DMA机制&#xff0c;掌握从数据布局到流水线编排的全栈优化艺术。 目录 &#x1f4cb; 摘…

作者头像 李华
网站建设 2026/6/10 13:18:45

迭代器详解

https://www.bilibili.com/video/BV18R4y1t7Hg/?spm_id_from333.337.search-card.all.click&vd_sourcebc3cd51950b607b63949ae5696d82dc2

作者头像 李华
网站建设 2026/6/10 13:34:24

少儿编程Scratch3.0教程——03 外观积木(项目练习)

在上节课 少儿编程Scratch3.0教程——03 外观积木&#xff08;基础知识&#xff09; 中&#xff0c;你学习了外观积木的用法&#xff0c;这节课我们就使用它们来一起完成一个动画&#xff0c;狗熊变兔子。老样子&#xff0c;我们还是先来看看做出来的动画效果。有一个人&#x…

作者头像 李华
网站建设 2026/6/9 19:00:35

GB2312、GBK、GB18030关系

GB2312、GBK、GB18030 三者是一脉相承的中文编码体系&#xff0c;核心关系是逐步扩展、向下兼容&#xff0c;后两者都是为解决前者的字符收录局限而生&#xff0c;且依次兼容前序编码&#xff0c;以下是具体梳理&#xff1a; GB2312 是基础&#xff0c;奠定中文编码雏形 它是 1…

作者头像 李华
网站建设 2026/6/10 13:32:29

FaceFusion API设计与二次开发实战指南

FaceFusion API设计与二次开发实战指南 在内容创作全面视频化的今天&#xff0c;人脸替换技术正从“趣味特效”走向专业级应用——无论是影视后期、虚拟主播&#xff0c;还是个性化广告生成&#xff0c;对高保真、低延迟的人脸处理服务需求日益增长。FaceFusion 作为开源社区中…

作者头像 李华
网站建设 2026/6/11 13:10:19

LangChain与LangFlow简化生成式应用开发

LangChain 与 LangFlow&#xff1a;让生成式 AI 开发回归直觉 在一次内部技术评审会上&#xff0c;我看到产品经理拿着一张手绘的流程图&#xff0c;试图向工程师解释她设想中的“智能客服机器人”——从文档检索到自动回复&#xff0c;中间还要加入情感分析和工单生成。沟通持…

作者头像 李华