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

  • 相关阅读:
    html 一号店静态页面
    多线程
    TCP通信
    MySQL连接查询
    Mysql数据库 DDL 数据定义语言
    MySQL数据库 DML 数据操作语言
    java字符流
    java File类
    java变量
    JDK、JRE、JVM的关系
  • 原文地址:https://www.cnblogs.com/chengliangsheng/p/3600935.html
Copyright © 2011-2022 走看看