zoukankan      html  css  js  c++  java
  • offsetof宏---个人笔记

      标准库里面提供的offsetof(t,m)宏,用来计算两个变量在内存中的地址偏移量

    #include <stdio.h>
    //原型: #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) /* #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 对这个宏的讲解我们大致可以分为以下4步进行讲解: 1、( (TYPE *)0 ) 0地址强制 "转换" 为 TYPE结构类型的指针; 2、((TYPE *)0)->MEMBER 访问TYPE结构中的MEMBER数据成员; 3、&( ( (TYPE *)0 )->MEMBER)取出TYPE结构中的数据成员MEMBER的地址; 4、(size_t)(&(((TYPE*)0)->MEMBER))结果转换为size_t类型。 宏offsetof的巧妙之处在于将0地址强制转换为 TYPE结构类型的指针, TYPE结构以内存空间首地址0作为起始地址,则成员地址自然为偏移地址。 可能有的读者会想是不是非要用0呢?当然不是,我们仅仅是为了计算的简便。 也可以使用是他的值,只是算出来的结果还要再减去该数值才是偏移地址。 */ typedef struct stu1{   int a;   char b[1];   int c; }stu1; void main() {   printf("offsetof(stu1,a): %d ",offsetof(stu1,a));   printf("offsetof(stu1,b): %d ",offsetof(stu1,b));   printf("offsetof(stu1,c): %d ",offsetof(stu1,c));   printf("sizeof(stu1) : %d ",sizeof(stu1)); }

    offsetof(stu1,a): 0

    offsetof(stu1,b): 4
    offsetof(stu1,c): 8
    sizeof(stu1) : 12
    Press any key to continue

  • 相关阅读:
    python---装饰器用法小结
    python---mysql事务
    python---sql语句集体更改数据
    python多继承中的深度优先与广度优先
    python---copy
    vue 主次页面区分
    css 过渡动画
    android web外壳
    cordova 打包 守护进程无法启动
    JavaScript 原生控制元素添加删除
  • 原文地址:https://www.cnblogs.com/chengliangsheng/p/3600935.html
Copyright © 2011-2022 走看看