如何从c ++中的函数返回数组?

时间:2018-04-22 03:46:28

标签: c++ arrays

我对这背后的理论感到很困惑。不知道如何从我的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;
}

我应该使用指针来传递数组中的元素吗?

1 个答案:

答案 0 :(得分:4)

简短的回答是你没有。将数组传递给函数时,实际上只是将指针传递给第一个元素(当您将数组作为参数传递时,该数组会衰减为指针)。这意味着如果在函数中修改数组,则修改原始数组而不是副本。因此,您的isAscending()函数会对您调用它的数组进行冒泡排序,并且不需要返回任何内容。

只是旁注,似乎作业只是想让你检查一个数组是否在升序,而不是对它进行排序。在这种情况下,isAscending()应该返回一个bool。

如果你需要一个函数来返回一个数组,你不能只是将指针传递给第一个元素,因为一旦函数返回,数组就会超出范围。您可以动态分配数组,但这只会产生一系列新问题。另一种方法可能是将指针返回到作为this之类的参数传递给它的数组的第一个元素,但由于调用者已经可以访问该数组,因此没有太大意义。

最好的方法是使用std::arraystd::vector之类的东西,你可以像任何其他变量一样按值返回。我还建议你good book

(我提供了这个答案,除了标记为重复,因为我认为重复问题的答案不够完整,可能会误导某人尝试返回指向本地数组的指针)