当前位置: 首页 > article >正文

【学习笔记】【内核】offsetof 的用法

offsetof 的作用就是获取结构体成员在结构体中的偏移量

#include <stdio.h>
//#include "stddef.h"                                                                                                 
struct person {
    char *name;
    char job[13];
    int age;
    int height;
    int weight;
};

#define myoffsetof(type,member) ((long unsigned int)&(((type*)0)->member))

int main()
{
    printf("%ld\n", myoffsetof(struct person, name));
    printf("%ld\n", myoffsetof(struct person, job));
    printf("%ld\n", myoffsetof(struct person, age));
    printf("%ld\n", myoffsetof(struct person, height));
    printf("%ld\n", myoffsetof(struct person, weight));
    return 0;
}

offsetof 是定义在 stddef.h 中,原型:

#define offsetof(type,member) ((long unsigned int)&(((type*)0)->member))

1,定义一个常量0

2,把这个常量强转成结构体指针类型,就可以访问后面的空间(type*)0。

3,是这个结构体指针指向这个参数((type*)0)->member。

4,取这个结构体变量的地址&(((type*)0)->member)。

5,强制类型转换(int)&(((type*)0)->member)


http://www.kler.cn/news/233788.html

相关文章:

  • 算法学习——LeetCode力扣二叉树篇1
  • c# 时间帮助类
  • 2.6:冒泡、简选、直插、快排,递归,宏
  • VMware虚拟机安装openEuler系统(一)(2024)
  • Idea里自定义封装数据警告解决 Spring Boot Configuration Annotation Processor not configured
  • Qt QML学习(一):Qt Quick 与 QML 简介
  • 【资料分享】基于单片机大气压监测报警系统电路方案设计、基于飞思卡尔的无人坚守点滴监控自动控制系统设计(程序,原理图,pcb,文档)
  • MySQL-SQL优化
  • JAVA设计模式之观察者模式详解
  • GPT原始论文:Improving Language Understanding by Generative Pre-Training论文翻译
  • Unity UGUI实现点击事件穿透
  • java多线程的四种创建方式、程序、线程、进程、并行、串行、Thread、Runnable、Callable、线程池技术
  • 二分查找的应用
  • 二维火API连接,实现无代码开发广告推广与用户运营集成
  • thinkphp数据批量提交(群发消息)
  • 烟火可禁却难禁,灵境难及终将及
  • 17、ELK
  • 785. 快速排序
  • 【数据分享】1929-2023年全球站点的逐日平均风速数据(Shp\Excel\免费获取)
  • Spring Boot 自定义指标
  • Matplotlib交互
  • Linux运行级别 | 管理Linux服务
  • Springboot集成rabbitmq
  • linux系统非关系型数据库memcached
  • 【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题
  • spring boot学习第十二篇:mybatis框架中调用存储过程控制事务性
  • 六、滚动条操作——调整图像亮度
  • 《Docker极简教程》--Docker环境的搭建--在Linux上搭建Docker环境
  • 架设游戏服务器租用价格?腾讯云和阿里云价格对比
  • 跟着cherno手搓游戏引擎【23】项目维护、2D引擎之前的一些准备