offsetof宏计算某变量相对于首地址的偏移量

news2024/11/17 23:40:04

宏:offsetof的使用

//offsetof (type,member)
//type是结构体的类型名,member是结构体中的成员名。

struct Student
{
	char name[5]; // 姓名
	int age;       // 年龄
	float score;   // 成绩
};

int main()
{
	struct Student s;

	printf("%zd\n", offsetof(struct	Student, name));
	printf("%zd\n", offsetof(struct	Student, age));
	printf("%zd\n", offsetof(struct	Student, score));

	return 0;
}

 我们通过画图可以只管看出结构体是如何存储数据的:

 可以发现通过offsteof 宏确实可以准确的计算出每个成员的偏移量,这就是offsetof宏的的作用。

 offsetof宏的实现

#define my_offsetof(TYPE,MEMBER)      (size_t)&(((TYPE*)0)->MEMBER)

 来使用一下:

#define my_offsetof(TYPE,MEMBER)      (size_t)&(((TYPE*)0)->MEMBER)
struct Student
{
	char name[5]; // 姓名
	int age;       // 年龄
	float score;   // 成绩
};
int main()
{
	struct Student s;

	printf("%p\n", &s);
	printf("%p\n", &(s.name));
	printf("%p\n", &(s.age));
	printf("%p\n", &(s.score));


	printf("%zd\n", my_offsetof(struct	Student, name));
	printf("%zd\n", my_offsetof(struct	Student, age));
	printf("%zd\n", my_offsetof(struct	Student, score));
	return 0;
}

感谢您的支持!!!!

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

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

相关文章

MyBatis Generator - 快速生成 实体类 和 映射文件

目录 一、MyBatis Generator 的使用 1.1、生成类和映射文件 1.1.1、在 pom.xml 中引入依赖 1.1.2、根据 configurationFile 标签中配置的路径 创建 generatorConfig.xml 文件 1.1.3、自动生成类 和 映射文件 1.1.4、在 Insert 标签中添加获取主键值的选项 1.1.5、扫描配置…

Linux完全卸载PyTorch重装(cuda11.1)

目录 1.命令行输入2.命令行接着输入3.可以看到卸载完后4.下载PyTorch(cuda对应11.1,可以通过test_gpu.py的测试) 原因:网上看的很多卸载的,并没有把所有跟随PyTorch的包卸载干净,虽然可能后期不会出现较大问…

【计算机操作系统慕课版】第二章课后习题笔记(创作周年纪念版)

一、简答题 (1)什么是前趋图?试画出下面四条语句的前趋图. S1:axy; S2:bz1; S3:ca-b; S4:wc1; 答:前趋图(Precedence Graph)是一个有向无循环图&#xff…

我朋友软件测试月薪5w,跟他聊过之后,才知道差距在哪里!

当我开始工作的时候,年薪50万对于我来说是一个遥不可及的幻想。我认为作为一名普通的软件测试工程师,月薪2w已经是天花板了。然而随着时间的推移和经验的积累,看到越来越多的同行拿到高薪时,我才意识到束缚我薪水的不是行业的天花…

集合迭代器

Iterator迭代器的定义:迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义是,提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该…

山西电力市场日前价格预测【2023-10-23】

日前价格预测 预测说明: 如上图所示,预测明日(2023-10-23)山西电力市场全天平均日前电价为232.21元/MWh。其中,最高日前电价为383.23元/MWh,预计出现在18: 30。最低日前电价为0.00元/MWh,预计出…

01、Python 的数据类型

目录 数据类型Python变量具有如下两个特征:输出变量 标识符规则整型四种表示形式浮点数复数 数据类型 使用Python变量 Python的基础类型 Python变量具有如下两个特征: 变量无需声明即可直接赋值:对一个不存在的变量赋值就相当于定义了一个…

十四天学会C++之第九天:内存管理

1. new和delete运算符 new运算符:动态分配内存。delete运算符:释放动态分配的内存。 new运算符:动态分配内存 new运算符的作用是在堆内存中动态分配内存块,并返回指向该内存块的指针。这使得我们能够在程序运行时创建变量&…

短视频如何批量添加水印?实用技巧带你飞

在当今的数字时代,短视频已经成为一种非常流行的内容形式。无论是社交媒体还是视频分享网站,短视频都已经成为了一种非常有吸引力的内容。然而,对于一些拥有大量视频内容的创作者来说,添加水印可能是一项繁琐的任务。本文将介绍如…

沙箱对抗之反沙箱技巧

前言 我们经常会在红蓝对抗中遇到这种场景,离线免杀,但是10分钟又被杀,这就是云查杀的威力,而云查杀可以分为下列两种: 1.静态分析 2.动态分析 静态分析就是分析样本的结构,导入表,等等来判定是否是恶意程…

C语言实现顺序表(图解增删查改+代码)

文章目录 写在前面1. 顺序表的初始化和销毁1.1 顺序表的初始化(SLInit)1.2 顺序表的销毁(SLDestroy) 2. 插入数据2.1 尾插数据(SLPushBack)2.2 头插数据(SLPushFront)2.3 指定位置插入数据(SLInsert) 3. 删除数据3.1 尾删数据(SLPopBack)3.2 头删数据(SLPopFront)3.3 删除指定位…

DDR3笔记 频率配置

可参考 基于FPGA的DDR3设计(2)DDR3各时钟频率及带宽分析 - 知乎 (zhihu.com) DDR3的时钟频率配置要看两个手册: 1.DDR3器件的手册。 2.开发板芯片的手册 器件 器件名称:MT41J128M16JT-125:K tCK 1.25ns,就可以算出…

冒泡排序应用过程中遇到的问题

冒泡排序思想&#xff1a;相邻的两个数据两两比较&#xff0c;然后按顺序排出 代码展示1&#xff1a; #include<stdio.h>void sort(int arr1[],int sz) {for (int i 0; i < sz-1; i){for (int j i1; j < sz; j){if (arr1[i] > arr1[j]) {int temp 0;temp a…

Wordpress - Xydown独立下载页面插件

Wordpress - Xydown独立下载页面插件&#xff1b; 1.使用ftp将demo.php和download.php上传到网站根目录&#xff08;两个文件中设计网站信息的代码可根据实际情况修改为自己的信息&#xff09; 使用ftp将demo.php和download.php上传到网站根目录&#xff08;两个文件中设计…

消息服务MNS之初见

消息服务MNS 说到消息服务MNS&#xff0c;那么消息服务MNS是什么呢&#xff1f;为什么会有消息服务MNS这款产品的产生呢&#xff1f; 什么是消息服务MNS 消息服务-阿里云消息服务MNS&#xff08;Message Service&#xff09;是一种高效、可靠、安全、便捷和可弹性扩展的分布…

GB28181学习(十)——视音频文件下载

要求 SIP服务器接收到媒体接收者发送的视音频文件下载请求后向媒体流发送者发送媒体文件下载命令&#xff0c;媒体流发送者采用RTP将视频流传输给媒体流接收者&#xff0c;媒体流接收者直接将视频流保存为媒体文件&#xff1b;媒体流接收者或SIP服务器可通过配置查询等方式获取…

算法模板之双链表图文详解

文章目录 &#x1f4cb;前言一. ⛳️使用数组模拟双链表讲解1.1 &#x1f514;为什么我们要使用数组去模拟双链表&#xff1f;1.2 &#x1f514;用数组模拟实现双链表1.2.1 &#x1f47b;整体框架说明1.2.2 &#x1f47b;双链表查找和修改1.2.3 &#x1f47b;双链表插入结点1.2…

云数据仓库实践:AWS Redshift在大数据储存分析上的落地经验分享

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

【RNA structures】RNA-seq 分析: RNA转录的重构和前沿测序技术

文章目录 RNA转录重建1 先简单介绍一下测序相关技术2 Map to Genome Methods2.1 Step1 Mapping reads to the genome2.2 Step2 Deal with spliced reads2.3 Step 3 Resolve individual transcripts and their expression levels 3 Align-de-novo approaches3.1 Step 1: Generat…

C语言------接续符和转义符

接续符和转义符--------- \ C语言中的\符号可以表示接续符和转义符。 C语言中的接续符( \ )放在一行代码的结尾&#xff0c;可以将下一行的内容提到这一行来。 \符号还有另一个作用 — 转义符。 C语言中的转义符()主要用于表示无回显字符&#xff0c;也可用于表示常规字符。 …