offsetof函数的实现
offsetof函数的实现
了解offsetof函数的作用------返回偏移量
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<stddef.h>struct S
{int a;char c;double d;
};int main()
{printf("%d\n", offsetof(struct S, a));printf("%d\n", offsetof(struct S, c));printf("%d\n", offsetof(struct S, d));return 0;
}
查看运行结果:
屏幕上打印了 int
和char
和double
的偏移量;
offsetof函数的实现
实现思路
我们知道offsetof是用来返回偏移量的,也就是我们只需设计一个函数用来返回偏移量就行了,我们用图来分析分析;
所以我们可以这样写代码
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<stddef.h>#define OFFSETOF(type,name) (size_t)(&(((type*)0)->name))struct S
{int a;char c;double d;
};int main()
{struct S s;printf("%d\n", OFFSETOF(struct S, a));printf("%d\n", OFFSETOF(struct S, c));printf("%d\n", OFFSETOF(struct S, d));return 0;
}
看不懂:(size_t)(&(((type*)0)->name))
没事儿;
看图:
offsetof函数的实现相关推荐
- C语言 泛型链表 如何计算(结构体中各元素)相对内存地址?(字节对齐,结构体对齐)offsetof()函数 ( (struct X*)0 ) -> Y)语法(匿名结构体)
示例: typedef struct _user {char name[20];char sex[20];int age;struct list_head mylist;//自定义结构体里保存双向循环 ...
- offsetof函数的使用和宏实现
文章目录 一.offsetof函数的定义 二.offsetof函数的使用 三.用宏实现offsetof 一.offsetof函数的定义 size_t offsetof(structName,membe ...
- c语言 offsetof函数,C 库宏 - offsetof()函数
宏offsetof 标准库stddef.h 定义 size_t offsetof(type, member); 分析 C 库宏 offsetof(type, member) 会生成一个类型为 size ...
- C库宏-offsetof()
在项目开发过程中,发现了offsetof()函数,随即查询了此函数,摘录如下: C库宏 - offsetof() 描述 C库宏offsetof(type, member-designator)会生成一 ...
- 使用offsetof对结构体指针偏移操作
题目来自于COMP20003 Tutorial 2: Program m ing Challenge 2.2 The technology stack at Hidebound Inc. uses a ...
- container of()函数简介
2019独角兽企业重金招聘Python工程师标准>>> 在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源 ...
- 数据结构----内存分配问题
一.结构的存储分配 在座各位,肯定都明白机器内存分配对程序的运行效率有多重要.今天,首先我们就来梳一遍结构的存储分配问题.编译器按照成员列表的顺序,依次给每个成员分配空间.只有当存储成员时满足正确的边 ...
- 《UNIX环境编程》第十六章--网络IPC:套接字
Contents 套接字接口 套接字描述符 寻址 字节序 地址格式 地址查询 绑定地址 建立连接 数据传输 套接字选项 带外数据 UNIX域套接字 使用套接字的示例 面向连接的ruptime 无连接的 ...
- Golang unsafe.Pointer指针
相较于 C 而言,Go 语言在设计时为了使用安全给指针在类型和运算上增加了限制,这让Go程序员既可以享受指针带来的便利,又避免了指针的危险性.除了常规的指针外,Go 语言在 unsafe 包里其实还通 ...
最新文章
- Mybatis源码解读-设计模式总结
- oracle 某天 减一天,案例一:shell脚本指定日期减去一天
- react设置默认props
- 使用BFC块级上下文
- java swing 图片旋转_Java图片旋转,背景透明化
- python创建文件对象的函数_Python 文件对象常用内建方法
- 30 秒?!Chrome 插件带你速成编程学习 | 程序员硬核评测
- 利用python合并关联两个表中的数据
- JAVA版开源MQTT Broker, 支持集群和规则引擎
- 基于springboot+bboss整合的elasticsearch(好用的一匹)
- 写完的文档有多少个字?字数统计在word哪里
- 完数什么意思_完美数是什么?
- 简洁,简单,再简化...
- IE已经阻止此站点以不安全的方式使用ActiveX控件的解决
- 【题目泛做】宝藏(期望)(类欧几里得)
- 爬虫实战操作(2)—— 新浪新闻内容细节
- 2021-2027全球与中国工业RFID特种电子标签市场现状及未来发展趋势
- 微信开发工具常用快捷键
- js 获取vue组件html_关于Vue中main.js,App.vue,index.html之间关系进行总结
- 计算机网络——ARPANET设计思想