zoukankan      html  css  js  c++  java
  • #define IOFFSETOF(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

    #include <iostream>
    
    #define IOFFSETOF(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
    
    using namespace std;
    
    int main(){
    
        struct Demo{
            char sex;
            int  id;
        };
    
        cout << "IOFFSETOF(Demo, sex): " << IOFFSETOF(Demo, sex) << endl;
        cout << "IOFFSETOF(Demo,  id): " << IOFFSETOF(Demo,  id) << endl;
        return 0;
    }

    输出:

    #define IOFFSETOF(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

    1.(TYPE*)0   将0强转为TYPE类型的指针,此时0作为一个匿名结构体的的起始地址。

    2.(TYPE*)0->MEMBER 指向结构体中的MEMBER成员。

    3.&((TYPE*)0->MEMBER) 获取MEMBER成员在结构体的地址,因为起始为0,所以获取的地址为相对偏移地址。

    结论:这个宏用于获取结构体中某个数据成员MEMBER在结构体中相对偏移地址。

  • 相关阅读:
    编程经验
    GIS业务逻辑
    算法逻辑
    js中arguments的作用
    C#基础及记忆概念
    POI创建Excle
    数据库元数据分析Demo
    c3p0写连接池 Demo
    dbutils的使用Demo
    dbcp写连接池 Demo
  • 原文地址:https://www.cnblogs.com/iuyy/p/13391851.html
Copyright © 2011-2022 走看看