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;
}

查看运行结果:

屏幕上打印了 intchardouble的偏移量;

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函数的实现相关推荐

  1. C语言 泛型链表 如何计算(结构体中各元素)相对内存地址?(字节对齐,结构体对齐)offsetof()函数 ( (struct X*)0 ) -> Y)语法(匿名结构体)

    示例: typedef struct _user {char name[20];char sex[20];int age;struct list_head mylist;//自定义结构体里保存双向循环 ...

  2. offsetof函数的使用和宏实现

    文章目录 一.offsetof函数的定义 二.offsetof函数的使用 三.用宏实现offsetof 一.offsetof函数的定义 size_t offsetof(structName,membe ...

  3. c语言 offsetof函数,C 库宏 - offsetof()函数

    宏offsetof 标准库stddef.h 定义 size_t offsetof(type, member); 分析 C 库宏 offsetof(type, member) 会生成一个类型为 size ...

  4. C库宏-offsetof()

    在项目开发过程中,发现了offsetof()函数,随即查询了此函数,摘录如下: C库宏 - offsetof() 描述 C库宏offsetof(type, member-designator)会生成一 ...

  5. 使用offsetof对结构体指针偏移操作

    题目来自于COMP20003 Tutorial 2: Program m ing Challenge 2.2 The technology stack at Hidebound Inc. uses a ...

  6. container of()函数简介

    2019独角兽企业重金招聘Python工程师标准>>> 在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源 ...

  7. 数据结构----内存分配问题

    一.结构的存储分配 在座各位,肯定都明白机器内存分配对程序的运行效率有多重要.今天,首先我们就来梳一遍结构的存储分配问题.编译器按照成员列表的顺序,依次给每个成员分配空间.只有当存储成员时满足正确的边 ...

  8. 《UNIX环境编程》第十六章--网络IPC:套接字

    Contents 套接字接口 套接字描述符 寻址 字节序 地址格式 地址查询 绑定地址 建立连接 数据传输 套接字选项 带外数据 UNIX域套接字 使用套接字的示例 面向连接的ruptime 无连接的 ...

  9. Golang unsafe.Pointer指针

    相较于 C 而言,Go 语言在设计时为了使用安全给指针在类型和运算上增加了限制,这让Go程序员既可以享受指针带来的便利,又避免了指针的危险性.除了常规的指针外,Go 语言在 unsafe 包里其实还通 ...

最新文章

  1. Mybatis源码解读-设计模式总结
  2. oracle 某天 减一天,案例一:shell脚本指定日期减去一天
  3. react设置默认props
  4. 使用BFC块级上下文
  5. java swing 图片旋转_Java图片旋转,背景透明化
  6. python创建文件对象的函数_Python 文件对象常用内建方法
  7. 30 秒?!Chrome 插件带你速成编程学习 | 程序员硬核评测
  8. 利用python合并关联两个表中的数据
  9. JAVA版开源MQTT Broker, 支持集群和规则引擎
  10. 基于springboot+bboss整合的elasticsearch(好用的一匹)
  11. 写完的文档有多少个字?字数统计在word哪里
  12. 完数什么意思_完美数是什么?
  13. 简洁,简单,再简化...
  14. IE已经阻止此站点以不安全的方式使用ActiveX控件的解决
  15. 【题目泛做】宝藏(期望)(类欧几里得)
  16. 爬虫实战操作(2)—— 新浪新闻内容细节
  17. 2021-2027全球与中国工业RFID特种电子标签市场现状及未来发展趋势
  18. 微信开发工具常用快捷键
  19. js 获取vue组件html_关于Vue中main.js,App.vue,index.html之间关系进行总结
  20. 计算机网络——ARPANET设计思想

热门文章

  1. java绘制流程图基本元素,java绘制图片
  2. JSP四大作用域,九大内置对象
  3. 主从复制:主从复制的概述、一主一从架构搭建主从复制的原理、同步数据一致性问题
  4. 一个小型 BI 项目的总结
  5. 单片机应用系统设计技术——数控云台master
  6. 上海高中计算机知识点总结,上海高中高考数学知识点总结(大全)
  7. [UE5 C++] 免费安装JetBrains Mono字体至IDE
  8. MySQL学习笔记——数据库的创建、修改与删除
  9. 李航《统计学习方法》第二版第一章-泛化误差
  10. 计算方法 差商与牛顿插值