C++结构体与其指针传参、赋值

先随便举个结构体的例子:

typedef struct {
  int32_t width;
  int32_t height;
}Buffer;//长和高两个值

创建一个结构体变量,如果不赋值,系统则会赋不可控的值。

    Buffer a;
    printf("------before init------\n");
    printf("a->width : %d, \n", a.width);
    printf("a->height : %d, \n", a.height);
    /*
        ------before init------
        a->width : 288953888,
        a->height : 329,
    */

如果想要使用结构体指针的话,可以有两种方法创建初始化

   1. 为b申请一块内存,在后续的操作中为其赋值,成功 

//1
Buffer *b = (Buffer*)malloc(sizeof(Buffer));
b->width =1000;
printf("b->width : %d, \n", b->width);

 2.向下文那样写会报错。因为将指针b指向空指针,并没有为其分配内存。需要把b指向一个地址

//2 
Buffer *b = nullptr;
b->width =1000;//报错。因为将指针b指向空指针,并没有为其分配内存。需要把b指向一个地址

指针传参

        下面的create 中,通过a->来赋值,而Create通过将a指向另一个

int32_t create(Buffer* a)
{
    a->width = 960;
    a->height = 540;
    printf("in the function create, %d x %d\n",a->width,a->height);
    return 0;
}

int32_t Create_by_malloc(Buffer* a)
{
    Buffer *b = (Buffer*)malloc(sizeof(Buffer));
    b->height = 1000;
    b->width = 2000;
    a = b;
    printf("in the function Create_by_malloc, %d x %d\n",a->width,a->height);
    return 0;
    
}

int main{
    ...
    Buffer a;
    printf("before init a: %d x %d\n", a.width,a.height);
    create(&a);
    printf("after create a: %d x %d\n", a.width,a.height);
    Create_by_malloc(&a);
    printf("after Create_by_malloc a: %d x %d\n", a.width,a.height);
}

 

从运行结果看,Create_by_malloc将其函数里的形参指向一个新的地址的时候并没有起到修改实参的作用。因为这个形参可以理解为拷贝一份指针,型参与实参地址相同,所以create可以通过修改指针地址所指向的内容

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值