我对这背后的理论感到很困惑。不知道如何从我的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;
}
我应该使用指针来传递数组中的元素吗?
答案 0 :(得分:4)
简短的回答是你没有。将数组传递给函数时,实际上只是将指针传递给第一个元素(当您将数组作为参数传递时,该数组会衰减为指针)。这意味着如果在函数中修改数组,则修改原始数组而不是副本。因此,您的isAscending()
函数会对您调用它的数组进行冒泡排序,并且不需要返回任何内容。
只是旁注,似乎作业只是想让你检查一个数组是否在升序,而不是对它进行排序。在这种情况下,isAscending()
应该返回一个bool。
如果你需要一个函数来返回一个数组,你不能只是将指针传递给第一个元素,因为一旦函数返回,数组就会超出范围。您可以动态分配数组,但这只会产生一系列新问题。另一种方法可能是将指针返回到作为this之类的参数传递给它的数组的第一个元素,但由于调用者已经可以访问该数组,因此没有太大意义。
最好的方法是使用std::array
或std::vector
之类的东西,你可以像任何其他变量一样按值返回。我还建议你good book。
(我提供了这个答案,除了标记为重复,因为我认为重复问题的答案不够完整,可能会误导某人尝试返回指向本地数组的指针)