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;
}
虽然没有在函数中返回数组,但也可以解决数组通信问题,主要思路就是调用方中定义数组,然后将地址传入。
加油~~~