【C语言】库宏offsetof

news2024/11/23 22:24:53

一.offsetof简介

因此,宏offsetof的作用是:

当你传入结构体的类型及其成员时,它会返回该成员在结构体中的偏移量.


 二.offsetof的使用

如下,我们使用offsetof打印一下结构体foo中,成员a,成员b及成员c相对于首地址的偏移量分别是多少:

#include <stdio.h>     
#include <stddef.h>   //使用offsetof需要包含的头文件

struct stu {
  char ch;
  int sz;
  short age;
};

int main ()
{
  printf ("offsetof(struct stu,ch) is %d\n",(int)offsetof(struct stu,ch));
  printf ("offsetof(struct stu,sz) is %d\n",(int)offsetof(struct stu,sz));
  printf ("offsetof(struct stu,age) is %d\n",(int)offsetof(struct stu,age));
  
  return 0;
}

运行结果如下:

offsetof(struct stu,ch) is 0
offsetof(struct stu,sz) is 4
offsetof(struct stu,age) is 8

 我们画图验证一下:


 三.offsetof的实现

库函数中对offsetof的实现是这样的:

#define OFFSET(type,member) (size_t)&((type*)0)->member)

我们画图分析一下其中的原理:

 了解了原理后,我们自己编写宏的时候也会有所启发.当然也可以使用成员地址减去首地址的形式,有兴趣的朋友可以自己编写试试.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1005991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

The specified module could not be found.

新电脑运行项目的时候出现了某个包找不到的问题 \\?\D:\guanwnag\cloudquery-website\node_modules\.pnpm\nxnx-win32-x64-msvc16.5.3\node_modules\nx\nx-win32-x64-msvc\nx.win32-x64-msvc.node 引入的路径就感觉有问题 去github上查找原因&#xff0c;发现是没安装 Micro…

代码随想录算法训练营day50|123.买卖股票的最佳时机III|188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 力扣题目链接 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再次购买前出售掉…

Linux系统用户密码过期_禁用过期策略

检查用户密码过期信息 使用Chage命令可以检查用户密码更改策略和过期信息。要检查特定用户的密码过期信息&#xff0c;可以使用以下命令&#xff1a; chage -l 用户禁用用户的密码过期 chage -m 0 -M 99999 -I -1 -E -1 用户这个命令将禁用该用户的密码过期。其中&#xff0…

企业性能测试成熟度

影响性能测试成熟度的5个内容项 1.性能测试流程规范 性能需求型模式-测试执行启动基本无规划&#xff0c;缺少标准流程规范&#xff0c;测试资产无法复用&#xff0c;测试结果无总结和沉淀性能常态化模式下流程规范->企业内部不同部门&#xff0c;各个团队共同制定并执行达…

Java“牵手”微店商品列表页数据采集+微店商品价格数据排序,微店API接口申请指南

微店平台创立于2011年5月&#xff0c;是北京口袋时尚科技开发的应用&#xff0c;2014年1月"微店"APP正式上线。微店已经从小微店主首选的开店工具转型为助力创业者发展兴趣、创立品牌、玩成事业的系统及基础设施。 微店商品列表数据包含商品名称、价格、销量、详情、…

Linux OpenGauss 数据库远程连接

目录 前言 1. Linux 安装 openGauss 2. Linux 安装cpolar 3. 创建openGauss主节点端口号公网地址 4. 远程连接openGauss 5. 固定连接TCP公网地址 6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内…

centos7配置iscsi共享存储-tgtd

前言 iSCSI又称为IP-SAN&#xff0c;是一种基于因特网及SCSI-3协议下的存储技术&#xff0c;iSCSI利用了TCP/IP的port 860 和 3260 作为沟通的渠道。透过两部计算机之间利用iSCSI的协议来交换SCSI命令&#xff0c;让计算机可以透过高速的局域网集线来把SAN模拟成为本地的储存装…

MATLAB科学计算从入门到精通

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 MATLAB&#xff08;Matr…

软件测试/测试开发丨ChatGPT在测试计划中的应用策略

简介 测试计划是指描述了要进行的测试活动的范围、方法、资源和进度的文档。它主要包括测试项、被测特性、测试任务和风险控制等。 所以在使用ChatGPT输出结果之前&#xff0c;我们需要先将文档的内容框架梳理好&#xff0c;以及将内容范围划定好&#xff0c;必要的时候&…

2024年,企业知识库的趋势与前景

企业知识库是指企业内部存储和组织知识的集中化平台&#xff0c;包括文档、资料、经验、专业知识等。它的重要性在于提供了一个集中管理和共享知识的机制&#xff0c;对企业的发展和竞争力具有重大影响。 企业知识库的重要性 1. 提高工作效率和协作能力 企业知识库使得企业内…

国产触控笔哪个牌子好?适合开学季的电容笔推荐

学校的开学季节已经来临&#xff0c;伴随着科技的发展&#xff0c;新的电子产品和数码设备层出不穷。比如&#xff0c;智能手机&#xff0c;iPad平板&#xff0c;电容笔等等。但实际上&#xff0c;要想让iPad平板的性能&#xff0c;得到最大程度的提升&#xff0c;我觉得这个电…

【OpenCV • c++】图像噪音 | 椒盐噪音 | 高斯噪音

文章目录 一、什么是图像噪音二、椒盐噪声三、高斯噪声 一、什么是图像噪音 图像噪声是图像在获取或是传输过程中受到随机信号干扰&#xff0c;妨碍人们对图像理解及分析处理的信号。很多时候将图像噪声看做多维随机过程&#xff0c;因而描述噪声的方法完全可以借用随机过程的描…

C语言学习系列-->一篇带你看懂内存函数

文章目录 前言memcpy概述模拟实现 memmove概述模拟实现 memsetmemcmp总结 前言 上篇文章学习了C语言字符串函数&#xff0c;只是对字符串进行操作 本节&#xff0c;小编整理了一下C语言中的内存函数&#xff0c;对内存进行操作&#xff0c;只针对会内存块&#xff0c;不针对数据…

视频剪辑文案怎么写 视频剪辑文案用什么软件

视频剪辑文案与平面材料文案相比&#xff0c;在声音、画面的展现上自由度更高&#xff0c;视觉的丰满感也更高&#xff0c;是视听结合效果的呈现。本文会给大家介绍视频剪辑文案怎么写&#xff0c;视频剪辑文案用什么软件的相关内容&#xff0c;让大家可以在短时间内学会视频剪…

无涯教程-JavaScript - VDB函数

描述 VDB函数使用双倍余额递减法或您指定的某些其他方法返回您指定的任何期间(包括部分期间)的资产折旧。 VDB代表可变余额递减。 语法 VDB (cost, salvage, life, start_period, end_period, [factor], [no_switch])争论 Argument描述Required/OptionalCostThe initial co…

langchain主要模块(二):数据连接

langchain2之数据连接 langchain1.概念2.主要模块模型输入/输出 (Model I/O)数据连接 (Data connection)链式组装 (Chains)代理 (Agents)内存 (Memory)回调 (Callbacks) 3.数据连接1.数据加载&#xff1a;2.文档分割&#xff1a;3.文档向量化&#xff1a;4.存储和检索向量数据:…

单例模式-饿汉模式、懒汉模式

单例模式&#xff0c;是设计模式的一种。 在计算机这个圈子中&#xff0c;大佬们针对一些典型的场景&#xff0c;给出了一些典型的解决方案。 目录 单例模式 饿汉模式 懒汉模式 线程安全 单例模式 单例模式又可以理解为是单个实例&#xff08;对象&#xff09; 在有些场…

SG-Former实战:使用SG-Former实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

Vue-video-player下载失败(npm i 报错)

Vue-video-player下载失败 最近在做项目时涉及到视频的播放组件&#xff0c;看了一下选择了Vue-video-player这个工具&#xff0c;实际在操作中是遇到许多问题的。 Q1:不支持谷歌 对于 “vue-video-player” 使用时出现 Adobe Flash 不再支持的提示&#xff0c;这是因为 Ado…

[maven] maven 简述及使用 maven 管理单个项目

maven 简述及使用 maven 管理单个项目 简单的说就是 maven 是一个项目管理工具&#xff0c;同时也是一个依赖管理工具。 使用 maven 生成的项目结构大致如下&#xff1a; project|- src/main/java|- src/main/resources|- src/test/java|- src/test/resources本篇笔记带一些…