C 结构体利用指针偏移对结构体内变量进行赋值

本文详细介绍了如何使用C语言中的指针操作来定义和访问结构体的内存,展示了通过指针赋值实现对结构体各成员变量的控制,帮助读者理解结构体内存结构。
摘要由CSDN通过智能技术生成

定义的结构体

//结构体
typedef struct ___STRUCT
{
    int i_0;
    int i_1;
    char c_0[20];
    char c_1[20];
    int i_2;
    int i_3;
}STRUCT;

操作

int main(int argc,const char** argv)
{
    STRUCT _struct;

    int* pointer_i = (int*)&_struct;//定义一个int型指针执行_struct的地址
    *pointer_i = 99;//结构体地址也是里面第一个变量的地址
    *(pointer_i + 1) = 99;//利用地址偏移获取第二个变量的地址,解引用后可以进行赋值

    char* pointer_c = (char*)(pointer_i + 2);//第三个变量是一个char型数组,因为指针是指向第二个变量,需要利用偏移过到第三个变量的位置
    strcpy(pointer_c,"hello world");//直接进行赋值
    strcpy(pointer_c + 20,"hi world");//因为数组长度为20,因此偏移时需要偏移20
    
    pointer_i = (int*)(pointer_c + 20 + 20);//过掉两个数组就到最后一个变量
    *pointer_i = 99;//直接解引用就可以赋值了

    *((int*)((char*)((int*)&_struct + 2) + 40) + 1) = 99;

    printf("%d,%d,%s,%s,%d,%d\n",   _struct.i_0,
                                    _struct.i_1,
                                    _struct.c_0,
                                    _struct.c_1,
                                    _struct.i_2,
                                    _struct.i_3);
    
    return 0;
}    

通过指针赋值结构体的操作可以很好的理解结构体的内存结构

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值