首页 / C++ / C++ 怎样让函数返回数组
C++ 怎样让函数返回数组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ 怎样让函数返回数组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3069字,纯文字阅读大概需要5分钟。
内容图文
![C++ 怎样让函数返回数组](/upload/InfoBanner/zyjiaocheng/639/eea1d8386c2a43deab0929f42d0e04b3.jpg)
这个问题属于非常初级的问题,但是对于初学不知道的人可能会比较头疼。C++ 中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函数返回指针来实现。比如一个矩阵相乘的函数,很容易地我们就写成
实例
1 #include <iostream> 2 3 using namespace std; 4 5 float* MultMatrix(float A[4], float B[4]) 6 { 7 float M[4]; 8 M[0] = A[0]*B[0] + A[1]*B[2]; 9 M[1] = A[0]*B[1] + A[1]*B[3]; 10 M[2] = A[2]*B[0] + A[3]*B[2]; 11 M[3] = A[2]*B[1] + A[3]*B[3]; 12 13 return M; 14 } 15 16 int main() 17 { 18 float A[4] = { 1.75, 0.66, 0, 1.75 }; 19 float B[4] = {1, 1, 0, 0}; 20 float *M = MultMatrix(A, B); 21 cout << M[0] << " " << M[1] << endl; 22 cout << M[2] << " " << M[3] << endl; 23 24 return 0; 25 }
但是运行后发现结果是:
1.75 1.75 6.51468e-039 3.76489e-039
本不是想要的结果。于是我们在函数中也加上显示代码,看看是不是计算的问题,得到结果:
1.75 1.75 0 0 1.75 1.75 1.96875 1.75
发现计算的结果是正确的,但返回后就变了,而且跟上次的结果不一样。这是为什么呢?
因为在函数中定义的数组M在函数执行完后已经被系统释放掉了,所以在调用函数中得到的结果当然不是计算后的结果。有一个解决办法就是动态分配内存,在函数中 new 一个数组,这样就不会被释放掉了。
于是就应该将:
float M[4];
改为:
float *M = new float[4];
修改运行后得到结果:
1.75 1.75 0 0 1.75 1.75 0 0
正确。但是我们这样并没有将自己申请的空间释放掉,如果我们在函数内释放的话结果就会跟开始时的一样了。
看看我们的调用代码:
float *M = MultMatrix(A, B);
这样其实是将M指针指向了函数中M数组的首地址,我们可以将M指针释放,效果和释放申请的M数组是一样的,因为它们指向的是同一片内存空间。于是代码就修改为:
实例
1 #include <iostream> 2 3 using namespace std; 4 5 float* MultMatrix(float A[4], float B[4]) 6 { 7 float *M = new float[4]; 8 M[0] = A[0]*B[0] + A[1]*B[2]; 9 M[1] = A[0]*B[1] + A[1]*B[3]; 10 M[2] = A[2]*B[0] + A[3]*B[2]; 11 M[3] = A[2]*B[1] + A[3]*B[3]; 12 cout << M[0] << " " << M[1] << endl; 13 cout << M[2] << " " << M[3] << endl; 14 15 return M; 16 } 17 18 int main() 19 { 20 float A[4] = { 1.75, 0.66, 0, 1.75 }; 21 float B[4] = {1, 1, 0, 0}; 22 float *M = MultMatrix(A, B); 23 cout << M[0] << " " << M[1] << endl; 24 cout << M[2] << " " << M[3] << endl; 25 delete[] M; 26 27 return 0; 28 }
运行结果:
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; }
点评内容:
首先,数组的 delete 是 delete[]。
其次,C++ 里面手动内存分配的一个重要原则是谁分配谁释放。
所以,不应该在MultMatrix里new数组,而应该在外面new好了之后传进去修改。
要想返回一个数组,使用智能指针之类的东西才是正途。
内容总结
以上是互联网集市为您收集整理的C++ 怎样让函数返回数组全部内容,希望文章能够帮你解决C++ 怎样让函数返回数组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。