如何在C ++中返回整数数组

时间:2018-11-08 01:18:44

标签: c++ arrays

对于C ++来说,我还比较陌生,今天他被分配了一个任务,在该任务中,我们必须创建一个函数,该函数将使用大小为25的空数组并用数字1到25填充它。这种语言甚至从未在课堂和他的示例中讲授充满了错误,将无法运行。这是我到目前为止所拥有的:

#include <iostream>

using namespace std;

int add25(int arr[], int size);

int main()
{

    const int x = 25;
    int myArray[x];
    add25(myArray, 25);

    int i;
    for (i = 0; i < 25; i++) {
        cout << myArray[i] << endl;
    }
}

int add25(int arr[], int size) {

    int i;
    for (i = 0; i < size; i++) {
        arr[i] = i + 1;
    }
}

显然,这仅返回数组的第一个数字(1),其余部分保留为空。我怎样才能为数组的每个部分返回一个数字?

2 个答案:

答案 0 :(得分:3)

您不必从add25()返回任何内容,因为它已经在您为其指定指针的数组上运行了。请注意,int foo[]与参数列表中的int *foo相同。

  

他的示例充满了错误,将无法运行。

该程序唯一的错误是add25()的返回类型应为void而不是int。更改声明和定义中的内容,代码将编译并运行。

答案 1 :(得分:1)

  

很明显,这只会返回数组的第一个数字(1),其余部分留空。

程序不执行此操作。

程序对数组索引[0 ... size)进行迭代,并分配所有这些数组元素。

然后函数结束而不返回任何值。但是该函数被声明为返回int。未声明从声明为返回非空值的函数不返回值的行为是不确定的。如果幸运的话,编译器也会注意到它:

warning: control reaches end of non-void function

  

如何返回整数数组

不可能从C ++中的函数返回数组。

但是,可以返回类实例,并且类可以包含数组。但是,必须在编译时知道类中包含的数组的大小。标准库提供了一个专门用于包装数组的类模板。它称为std::array。您可以这样返回std::array

std::array<int, 25> add25() {
    std::array<int, 25> arr{};
    // process arr in a manner of your choosing
    return arr; // return a copy of arr
}

为避免数组大小恒定的限制,可以使用std::vector来动态分配数组。


返回数组的另一种方法是简单地让函数的调用者创建数组,而仅在函数中修改数组。

实际上,只要修复了我答案中前面提到的错误,示例程序便可以做到。