C++中函数返回值能否是数组?
来源:互联网 发布:程序员职业规划范文 编辑:程序博客网 时间:2024/06/05 05:42
什么时候要返回数组呢?无非是我们对数组值进行了修改操作。
印象中,函数的返回值只能是一个值。不能是多个值。return语句也决定了只能返回一个值。
多数人讨论认为可以通过返回数组首地址,也就等同与返回指针。
其实指针也只是一个整型值,代表了数组首地址,不是数组值。
疑问一:那有了首地址能否索引到整个数组?
疑问二:返回了首地址,如果不是动态数组,数组会不会撤销掉?导致返回了一个无效的数组指针?
数组需要在函数外定义。全局或者动态。
我们举个例子实践一下吧。
针对疑问二,我们定义一个内部函数数组实验一下:
#include <iostream>using namespace std;float* Array(float *A,int length){float M[5]; //Array函数内部数组for (int i=0; i<length; i++) M[i]=A[i];return M;}int main(){ float A[5] = { 1.75, 0.25, 0, 0.75 ,2.5}; float *M = Array(A,5);for (int i=0; i< 5; i++) cout << M[i] <<endl; cout << endl; return 0;}输出结果是:
1.75-1.07374e+008-1.07374e+008-1.07374e+008-1.07374e+008结果显示:只输出了数组首地址对应的数组值,其他数值都未输出。
原因:因为在函数中定义的数组M在函数执行完后已经被系统释放掉了,所以在调用函数中得到的结果当然不是计算后的结果。
有一个解决办法就是动态分配内存,在函数中new一个数组,这样就不会被释放掉了。
实验二,声明动态数组。
float* Array(float *A,int length){float *M=new float[5]; //Array函数内部动态数组,替换原来的 flaot M[5];for (int i=0; i<length; i++) M[i]=A[i];return M;}
输出结果:
1.750.2500.752.5
结果正确。
实验三,我们也直接采用外部数组进行操作,结果也显示这样是可以保证数值正确的。
#include <iostream>using namespace std;float* Array(float *A,int length){float temp; for(int i=0;i<length-1;i++) for(int j=i+1;j<length;j++) if(A[i]>A[j]){ temp=A[i]; A[i]=A[j]; A[j]=temp; } return A;}int main(){ float A[5] = { 1.75, 0.25, 0, 0.75 ,2.5}; float *M = Array(A,5);for (int i=0; i< 5; i++) cout << M[i] <<endl; cout << endl; return 0;}输出结果是:
00.250.751.752.5
//结果正确,可是长度是我们自己已经知道的。
以下是一些网友的解决办法;
@langhaixin(这是大家最能想到的办法,但是不能解决问题)
返回数组有两种方法,一是把数组以引用的方式传入,返回其首地址指针。
二是传入数组首地址指针,返回其首地址指针
@chinafriend_xj
对数组也可按每个元素进行返回,主调程序利用循环进行控制,程序执行时间延长,但简单随意,亦可避免对指针的误用.
@BlurEyes
如果返回的数组长度不定,为什么不用vector?
@Muf
这算是一种实现吧:
class myarr //实际上是一种smart pointer{public: myarr(int* p){m_ptr=p;} ~myarr(){delete[] p} int& operator[](...){...} //还有operator* //整数没有operator-> ...};myarr func(...){ return new int[100];}void main(){ myarr arr = func(...); arr[10] = 123; std::cout<<arr[10];}
0 0
- C++中函数返回值能否是数组?
- C++中函数返回值能否是数组?
- c语言中调用函数的返回值,如果是数组,主函数要输出这个数组怎么实现?
- Java中能否利用函数参数来返回值
- Java中能否利用函数参数来返回值
- c函数返回数组
- swift中返回值是函数
- C#函数的参数中返回结构数组
- 在C中如何使函数返回数组
- 在C/C++中如何使函数返回数组
- 在C中如何使函数返回数组
- 在C中如何使函数返回数组
- 在C中如何使函数返回数组
- 在C中如何使函数返回数组
- 在C中如何使函数返回数组
- 在C中如何使函数返回数组
- 在C中如何使函数返回数组
- 在C中如何使函数返回数组
- 初识UML—UML的9种图形
- debug : Embed Manifest 选项引起的BUG
- 教你如何寻找更多的外链
- 编写你的第一个垃圾收集器
- Rotate List
- C++中函数返回值能否是数组?
- 编写你的第一个垃圾收集器
- Linux中grep不显示本身进程?
- 编写你的第一个垃圾收集器
- python中2.x和3.x的区别
- 我是自由职业者。
- 我的git仓库,顺记github配置
- 回归了,继续写写博客
- MFC文档的串行化