以下转自:http://blog.csdn.net/lijiayu2015/article/details/52821562
C++中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函数返回指针来实现。
不能直接返回函数中定义的数组,会被释放掉
float* add(a[3],b[3])
{
float sum[4];
sum[0]=a[0]+b[0];
sum[1]=a[1]+b[1];
sum[2]=a[2]+b[2];
return sum;
}
int main()
{
float A[3] = { 1, 1, 1};
float B[3] = { 1, 2,3};
float *M = add(A, B);
cout << M[0] << " " << M[1] << " "<<M[2]<<endl;
cout << M[0] << " " << M[1] << " " << M[2] << endl;
system("pause");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
![运行结果](https://img-blog.csdn.net/20161015100750853)
第一次输出的结果正确,第二次输出结果不对,因为指针函数返回的指针被释放了。
正确方法1:函数内使用new动态分配内存
float* add(float a[3], float b[3])
{
float* sum=new float[3];
sum[0] = a[0] + b[0];
sum[1] = a[1] + b[1];
sum[2] = a[2] + b[2];
return sum;
}
int main()
{
float A[3] = { 1, 1, 1};
float B[3] = { 1, 2,3};
float *M = add(A, B);
cout << M[0] << " " << M[1] << " "<<M[2]<<endl;
cout << M[0] << " " << M[1] << " " << M[2] << endl;
delete[] M;
system("pause");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
![输出结果正确。](https://img-blog.csdn.net/20161015101707352)
方法2:在函数外定义数组,通过形参传入函数,在函数内修改数组
void add(float a[3], float b[3],float sum[3])
{
sum[0] = a[0] + b[0];
sum[1] = a[1] + b[1];
sum[2] = a[2] + b[2];
}
int main()
{
float A[3] = { 1, 1, 1};
float B[3] = { 1, 2,3};
float M[3];
add(A, B, M);
cout << M[0] << " " << M[1] << " "<<M[2]<<endl;
cout << M[0] << " " << M[1] << " " << M[2] << endl;
system("pause");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
![输出结果正确](https://img-blog.csdn.net/20161015102136732)
以上转自:http://blog.csdn.net/lijiayu2015/article/details/52821562
踩了坑之后,正确用法:
![](https://img-blog.csdn.net/20180104111523746?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzkxMjAwNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20180104111535633?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzkxMjAwNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20180104111625743?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzkxMjAwNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
调用:
![](https://img-blog.csdn.net/20180104111703854?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzkxMjAwNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20180104111722801?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzkxMjAwNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
finish!