C++数组在函数中的传递与返回
来源:互联网 发布:云计算的三种类型 编辑:程序博客网 时间:2024/04/28 07:59
数组在函数中做形参声明时可以有两种形式①数组②指针,举例如下:
void sum(int arr[],int len)
{
//函数体
}
void sum(int *arr,int len)
{
//函数体
}
当且仅当用于函数头或函数原型中,int *arr和int arr[]的含义才是相同的,他们都意味着arr是一个int指针。然而,数组表示法(int arr[])提醒用户,arr不仅指向int,还指向int数组的第一个元素。 怎样让函数返回数组,这个问题属于非常初级的问题,但是对于初学不知道的人可能会比较头疼。C++中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函数返回指针来实现。比如一个矩阵相乘的函数,很容易地我们就写成:
#include <iostream>using namespace std;float* MultMatrix(float A[4], float B[4]){ float M[4]; M[0] = A[0]*B[0] + A[1]*B[2]; M[1] = A[0]*B[1] + A[1]*B[3]; M[2] = A[2]*B[0] + A[3]*B[2]; M[3] = A[2]*B[1] + A[3]*B[3]; return M;}int main(){ float A[4] = { 1.75, 0.66, 0, 1.75 }; float B[4] = {1, 1, 0, 0}; float *M = MultMatrix(A, B); cout << M[0] << " " << M[1] << endl; cout << M[2] << " " << M[3] << endl; return 0;}但是运行后发现结果是:1.75 1.75
6.51468e-039 3.76489e-039
根本不是想要的结果,此时我们在调用的函数内设置断点进行调试,发现计算的结果是正确的,但返回后就变了,而且跟上次的结果不一样。这是为什么呢?
因为在函数中定义的数组M在函数执行完后已经被系统释放掉了,所以在调用函数中得到的结果当然不是计算后的结果。有一个解决办法就是动态分配内存,在函数中new一个数组,这样就不会被释放掉了。
#include <iostream>using namespace std;float* MultMatrix(float A[4], float B[4]){ float *M = new float[4]; M[0] = A[0]*B[0] + A[1]*B[2]; M[1] = A[0]*B[1] + A[1]*B[3]; M[2] = A[2]*B[0] + A[3]*B[2]; M[3] = A[2]*B[1] + A[3]*B[3]; cout << M[0] << " " << M[1] << endl; cout << M[2] << " " << M[3] << endl; return M;}int main(){ float A[4] = { 1.75, 0.66, 0, 1.75 }; float B[4] = {1, 1, 0, 0}; float *M = MultMatrix(A, B); cout << M[0] << " " << M[1] << endl; cout << M[2] << " " << M[3] << endl; delete[] M; return 0;}
运行结果:
1.75 1.75
0 0
1.75 1.75
0 0
没有问题,new的空间也delete掉了。
#include <iostream>using namespace std;void MultMatrix(float M[4], float A[4], float B[4]){ M[0] = A[0]*B[0] + A[1]*B[2]; M[1] = A[0]*B[1] + A[1]*B[3]; M[2] = A[2]*B[0] + A[3]*B[2]; M[3] = A[2]*B[1] + A[3]*B[3]; cout << M[0] << " " << M[1] << endl; cout << M[2] << " " << M[3] << endl;}int main(){ float A[4] = { 1.75, 0.66, 0, 1.75 }; float B[4] = {1, 1, 0, 0}; float *M = new float[4]; MultMatrix(M, A, B); cout << M[0] << " " << M[1] << endl; cout << M[2] << " " << M[3] << endl; delete[] M; return 0;}
0 0
- C++数组在函数中的传递与返回
- 二维数组的在函数中的传递与使用
- 8086与ARM在函数调用中的参数传递与返回值存储
- C函数参数传递与返回值传递
- 关于在C/C++语言中,函数如何返回数组,数组如何作为参数传递以及返回数组的函数该如何调用问题的总结
- 函数中的数组传递
- c函数返回数组
- 数组与函数传递
- 数组指针和指针数组以及二维数组的函数间传递与返回
- C++数组(二维数组)与指针 以及 函数传递/返回指针和数组参数
- 探讨c++函数中的参数传递与返回值(三) 函数返回值
- 指针和数组在函数中的传递实例
- 在C中如何使函数返回数组
- 在C/C++中如何使函数返回数组
- 在C中如何使函数返回数组
- 在C中如何使函数返回数组
- 在C中如何使函数返回数组
- 在C中如何使函数返回数组
- 1094. The Largest Generation (25)【二叉树】——PAT (Advanced Level) Practise
- Ubuntu下IntelliJ IDEA新建Java Web项目
- iOS开发 - 第02篇 - UI进阶 - 03 - TableView Cell
- 【数据库】where 1=1 和 where 1=0
- Mysql——锁问题
- C++数组在函数中的传递与返回
- Python:no encoding declared 错误
- 自动布局的一些笔记
- JS学习笔记
- File类
- 常系数线性递推式的快速求单项值方法
- NYOJ 10 skiing
- 安卓学习笔记之自定义ContentProvider
- iOS小知识汇总