我有一个数组int arr[5],传递给一个函数fillarr(int arr[]):
int fillarr(int arr[])
{
for(...);
return arr;
}
我如何返回那个数组? 我将如何使用它,比如我返回了一个指针我将如何访问它?
我有一个数组int arr[5],传递给一个函数fillarr(int arr[]):
int fillarr(int arr[])
{
for(...);
return arr;
}
我如何返回那个数组? 我将如何使用它,比如我返回了一个指针我将如何访问它?
当前回答
这样的:
int fillarr(int arr[])
实际上与:
int fillarr(int *arr)
如果你真的想返回一个数组你可以把这行改为
int * fillarr(int arr[]){
// do something to arr
return arr;
}
它并不是真正返回一个数组。方法的开头返回一个指针 数组的地址。
但是记住,当你传递数组时,你只是传递了一个指针。 当你修改数组数据时,你实际上是在修改数据 指针指向。因此,在传入数组之前,必须意识到 你在外面已经有了修改后的结果。
e.g.
int fillarr(int arr[]){
array[0] = 10;
array[1] = 5;
}
int main(int argc, char* argv[]){
int arr[] = { 1,2,3,4,5 };
// arr[0] == 1
// arr[1] == 2 etc
int result = fillarr(arr);
// arr[0] == 10
// arr[1] == 5
return 0;
}
我建议你可以考虑在fillarr函数中加入一个长度 这一点。
int * fillarr(int arr[], int length)
这样你就可以使用length来填充数组的长度,不管它是什么。
正确地使用它。你可以这样做:
int * fillarr(int arr[], int length){
for (int i = 0; i < length; ++i){
// arr[i] = ? // do what you want to do here
}
return arr;
}
// then where you want to use it.
int arr[5];
int *arr2;
arr2 = fillarr(arr, 5);
// at this point, arr & arr2 are basically the same, just slightly
// different types. You can cast arr to a (char*) and it'll be the same.
如果您只想将数组设置为一些默认值,请考虑使用 内置memset功能。
喜欢的东西: Memset ((int*)&arr, 5, sizeof(int));
当我谈到这个话题的时候。你说你在用c++。看一下如何使用stl向量。您的代码可能会更加健壮。
有很多教程。这里有一个可以告诉你如何使用它们。 http://www.yolinux.com/TUTORIALS/LinuxTutorialC++STL.html
其他回答
template<typename T, size_t N>
using ARR_REF = T (&)[N];
template <typename T, size_t N>
ARR_REF<T,N> ArraySizeHelper(ARR_REF<T,N> arr);
#define arraysize(arr) sizeof(ArraySizeHelper(arr))
来源:https://www.tutorialspoint.com/cplusplus/cpp_return_arrays_from_functions.htm
c++不允许将整个数组作为函数的参数返回。但是,您可以通过指定数组的名称而不指定索引来返回指向数组的指针。
如果你想从一个函数返回一个一维数组,你必须声明一个函数返回一个指针,如下面的例子所示:
int * myFunction() { . . . }
c++不提倡将局部变量的地址返回给函数外部,因此必须将局部变量定义为静态变量。
将这些规则应用于当前问题,我们可以编写如下程序:
# include <iostream> 使用命名空间std; Int * fillarr(); Int main () { int * p; P = fillarr(); For (int I = 0;I < 5;我+ +) Cout << "p[" << I << "]: "<< *(p + I) << endl; 返回0; } Int * fillarr() { 静态int arr[5]; For (int I = 0;I < 5;+ + i) Arr [i] = i; 返回arr; }
输出将是:
p[0]=0
p[1]=1
p[2]=2
p[3]=3
p[4]=4
为什么不把数组作为参数“返回”呢?
fillarr(int source[], size_t dimSource, int dest[], size_t dimDest)
{
if (dimSource <= dimDest)
{
for (size_t i = 0; i < dimSource; i++)
{
//some stuff...
}
}
else
{
//some stuff..
}
}
或者用更简单的方式(但你必须知道尺寸…):
fillarr(int source[], int dest[])
{
//...
}
int *fillarr(int arr[])
你仍然可以使用结果like
int *returned_array = fillarr(some_other_array);
if(returned_array[0] == 3)
do_important_cool_stuff();
在c++ 11中,可以返回std::array。
#include <array>
using namespace std;
array<int, 5> fillarr(int arr[])
{
array<int, 5> arr2;
for(int i=0; i<5; ++i) {
arr2[i]=arr[i]*2;
}
return arr2;
}