如何从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::arraystd::vector 之类的东西,您可以像任何其他变量一样按值返回。我还建议获得good book。

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

【讨论】:

以上是关于如何从c ++中的函数返回数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从带有指针的函数返回数组

如何从用户定义的函数返回 3D 数组?

如何从函数中返回字符串

从C中的函数返回具有多个可变长度数组的结构

如何从 C# 中的 C++ dll 中的全局变量从函数中获取返回数组?

js如何返回数组