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;
}
//main()中调用使用
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
第一次输出的结果正确,第二次输出结果不对,因为指针函数返回的指针被释放了。
正确方法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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
方法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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18