关于结构体的偏移量

本文介绍了一种利用宏定义快速获取C/C++结构体成员偏移量的方法,并展示了如何通过偏移量直接访问和修改结构体成员变量的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "stdafx.h"
#include <iostream>

struct testStruct{
        char a;
        short b;
  int c;
        char path[1024];
  int d;
};

#define PARAM_OFFSET(Strct, Field) ((unsigned long)(unsigned long*)&(((Strct *)0)->Field))

int main(int argc, char* argv[])
{
    printf("a's offset:%d, b's offset:%d,c's offset:%d,path's offset:%d,c's d:%d/n",
     PARAM_OFFSET(testStruct,a),
     PARAM_OFFSET(testStruct,b),
     PARAM_OFFSET(testStruct,c),
     PARAM_OFFSET(testStruct,path),
     PARAM_OFFSET(testStruct,d));
 printf("size is : %d",sizeof(testStruct));

 testStruct* testStru = new testStruct();
 testStru->a = 2;
 testStru->c = 4;
 int offset = PARAM_OFFSET(testStruct,c);
 short value = 5;
 *((unsigned char*)testStru + offset) = value;
 ++testStru;
 return 0;
}

 

      宏PARAM_OFFSET(Strct, Field) 先把0地址转换为结构体(即结构体的首地址为0),那么结构体成员变量的地址即为其偏移量。通过结构体的指针偏移量来快速方便地获取或修改结构体成员变量的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值