C/C++函数返回数组的方法

C/C++中想要一个函数返回数组,此类问题,应用场景往往为了解决函数间相互通信,比如某个函数内处理的完的结果数据需要交接给另一个函数的情况,方法大概有三种:(例如在函数func中对a[]数组进行赋值,之后可以再对该数组进行其他操作)

1.利用全局变量直接对数据进行操作。

int a[2];
void func(void)
{
    a[0] = 1;
    a[1] = 2;
}

int main()
{
    func();
    ....
}

这类方法打破了函数间的通信及封装的思想,所以不推荐使用。

2.通过堆区动态开辟内存解决。

int *func(void)
{
    int a[2];
    a[0] = 1;
    a[1] = 2;
    return a;
}

int main()
{
    int *p;
    p = func();
    ....
    return 0;
}

这种方法是错误的,我们知道C/C++中函数的局部变量,在函数退出就自动删除了,所以函数不能返回函数内局部变量的地址,这与变量的生命周期有关,所以我们可以动态用malloc函数开辟内存,在用free释放。

int *func(void)
{
    int *a;
    a = (int*)malloc(sizeof(int)*2);
    a[0] = 1;
    a[1] = 2;
    return a;
}

int main()
{
    int *p;
    p = func();
    ....
    free(a);
    return 0;
}

由于动态开辟内存在堆区,手动开辟,手动释放,这样就可以完全规避变量生命周期的问题。

3.由调用方传入数组指针

void func(int *a)
{
    a[0] = 1;
    a[1] = 2;
    return a;
}

int main()
{
    int a[2];
    func(a);
    ....
    return 0;
}

虽然没有在函数中返回数组,但也可以解决数组通信问题,主要思路就是调用方中定义数组,然后将地址传入。

加油~~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值