如何从c ++中的函数返回数组[重复]
Posted
技术标签:
【中文标题】如何从c ++中的函数返回数组[重复]【英文标题】:How to return an array from a function in c++ [duplicate] 【发布时间】:2018-10-02 09:22:38 【问题描述】:我真的对这背后的理论感到困惑。不知道如何从我的 isAscending 函数返回数组,以便我可以在 main 中打印出来。
#include <iostream>
#include <string>
using namespace std;
// Implement printArray here
void printArray(int array[], int n)
for (int i = 0; i < n; ++i )
cout << array[i] << endl;
;
// Implement isAscending here
int isAscending(int array[], int n)
for(int i = 0; i <= n; ++i)
for(int j = 0; j <= n; ++j)
if(array[i] > array[j+1])
int temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
return printArray(array, n);
;
// DO NOT CHANGE MAIN FUNCTION BELOW
int main()
int myarray[100];
cout << "Enter number of integers : ";
int n;
cin >> n;
cout << "Enter " << n << " integers" << endl;
for (int i = 0; i < n; i++)
cin >> myarray[i];
cout << "Contents of array : ";
printArray(myarray, n);
cout << "Output of isAscending: " << isAscending(myarray, n) << endl;
我应该使用指针来传递数组中的元素吗?
【问题讨论】:
您不能在 C++ 中使用return
数组。我猜这是作业,因为关于不更改 main
的评论,所以你可能只想拥有 isAscending
return
bool
(在你的情况下,0 或 1);这将使isAscending
成为谓词函数。
为什么要更改isAscending
函数中的数组
作业到底是什么?逐字。你应该对数组进行排序吗?
返回数组使用std::array
。
我正在尝试将数组传递给 isascending() 函数对其进行排序以升序打印出内容。
【参考方案1】:
简短的回答是你没有。当您将数组传递给函数时,实际上只是将指针传递给第一个元素(当您将数组作为参数传递时,数组衰减为指针)。这意味着如果您修改函数中的数组,您修改的是原始数组而不是副本。因此,您的 isAscending()
函数将对您调用它的数组进行冒泡排序,并且不需要返回任何内容。
顺便说一句,该作业似乎只是想让您检查一个数组是否在升序,而不是对其进行排序。在这种情况下,isAscending()
应该返回一个布尔值。
如果你需要一个函数来返回一个数组,你不能只传递一个指向第一个元素的指针,因为一旦函数返回,数组就会超出范围。您可以动态分配数组,但这只会产生一堆新问题。另一种方法可能是返回指向数组第一个元素的指针,作为this 之类的参数传递给它,但这样做没有多大意义,因为调用者已经可以访问数组。
最好的方法是使用std::array
或std::vector
之类的东西,您可以像任何其他变量一样按值返回。我还建议获得good book。
(除了标记为重复问题之外,我还提供了这个答案,因为我认为重复问题的答案不够完整,可能会误导某人尝试返回指向本地数组的指针)
【讨论】:
以上是关于如何从c ++中的函数返回数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章