对于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),其余部分保留为空。我怎样才能为数组的每个部分返回一个数字?
答案 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
来动态分配数组。
返回数组的另一种方法是简单地让函数的调用者创建数组,而仅在函数中修改数组。
实际上,只要修复了我答案中前面提到的错误,示例程序便可以做到。