关于C语言结构体指针初始化,结构体指针作为返回参数, 返回结果被随机化

1 结构体指针的初始化:

// 1. 使用malloc分配内存,注意此方法需手动回收内存
MyData *myData = (MyData *) malloc(sizeof(MyData));

// 2. 先定义临时变量,然后取地址。注意此方法会自动回收内存,不适合作为返回数据
MyData mydata = {1,2,3};
MyData *myDataP = &MyData;

2:结构体指针作为返回参数,

int myFunction(Mydata *src, Mydata **dst) {

    // 使用malloc分配内存,注意此方法需手动回收内存
    MyData *myData = (MyData *) malloc(sizeof(MyData));
    myData->a = 1;
    myData->b = 2;
    myData->b = 3;
    // 将其返回, 上层函数可正常拿到数据
    *dst = mydata;

    // 先定义临时变量,然后取地址。注意此方法会自动回收内存,不适合作为返回数据
    MyData mydata2 = {1,2,3};
    MyData *myData3 = &MyData3;
    // 将其返回,上层函数中取不到这个对象。应该是被释放了。
    *(dst+1) = myData2;
    *(dst+2) = myData3;
    return 0;
}

int main(){
    // 初始化二位指针,需指定一维指针的个数。这里设为3
    MyData **dst = (MyData **)malloc(3*sizeof(MyData *));
    // 初始化一维指针
    MyData *src = (MyData *) malloc(sizeof(MyData));
    myFunction(src, dst);
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值