C++ 函数返回数组C++;

C++ 函数返回数组C++;,c++,arrays,multidimensional-array,C++,Arrays,Multidimensional Array,我有一个函数,想返回一个2d数组: int flip[5][5](int input[5][5]); 但它返回一个错误:不允许函数错误(这是一个翻译) 我怎样才能解决这个问题 这项工作: void flip(int input[5][5]); 在这个函数声明中 void flip(int input[5][5]); 该参数被隐式调整为指向数组第一个元素的指针。所以实际上函数声明看起来像 void flip(int ( *input )[5] ); 您不能返回数组,因为数组没有复制构造函数

我有一个函数,想返回一个2d数组:

int flip[5][5](int input[5][5]);
但它返回一个错误:不允许函数错误(这是一个翻译)

我怎样才能解决这个问题

这项工作:

void flip(int input[5][5]);

在这个函数声明中

void flip(int input[5][5]);
该参数被隐式调整为指向数组第一个元素的指针。所以实际上函数声明看起来像

void flip(int ( *input )[5] );
您不能返回数组,因为数组没有复制构造函数

如果数组本身不是函数的局部变量,则可以通过引用返回数组

例如,如果funciotn通过引用获取数组,则可以从函数返回该数组

比如说

int ( & flip(int ( &input )[5][5]) )[5][5];
struct data
{
    int a[5][5];
};

data flip( int input[5][5] );
您可以将数组包装在一个结构中,并将此结构与数组一起返回

比如说

int ( & flip(int ( &input )[5][5]) )[5][5];
struct data
{
    int a[5][5];
};

data flip( int input[5][5] );

在这个函数声明中

void flip(int input[5][5]);
该参数被隐式调整为指向数组第一个元素的指针。所以实际上函数声明看起来像

void flip(int ( *input )[5] );
您不能返回数组,因为数组没有复制构造函数

如果数组本身不是函数的局部变量,则可以通过引用返回数组

例如,如果funciotn通过引用获取数组,则可以从函数返回该数组

比如说

int ( & flip(int ( &input )[5][5]) )[5][5];
struct data
{
    int a[5][5];
};

data flip( int input[5][5] );
您可以将数组包装在一个结构中,并将此结构与数组一起返回

比如说

int ( & flip(int ( &input )[5][5]) )[5][5];
struct data
{
    int a[5][5];
};

data flip( int input[5][5] );

使用
std::array
而不是内置数组类型。

使用
std::array
而不是内置数组类型。

返回数组的语法很难看。最好使用typedef或auto

auto flip(int input[5][5]) -> int[5][5];
然而,问题是,您没有将数组作为引用或指针传递给函数,这是行不通的

typedef int myArray[5][5];

void foo(myArray& arr) {
    //do stuff
}

int main() {
    int arr[5][5];
    foo(arr);
    return 0;
}

顺便说一句,像这样处理数组很乏味,最好使用STL中的容器。

返回数组的语法很难看。最好使用typedef或auto

auto flip(int input[5][5]) -> int[5][5];
然而,问题是,您没有将数组作为引用或指针传递给函数,这是行不通的

typedef int myArray[5][5];

void foo(myArray& arr) {
    //do stuff
}

int main() {
    int arr[5][5];
    foo(arr);
    return 0;
}

另一方面,使用这样的数组很乏味,最好使用STL中的容器。

请发布一个。请,发布一个.a
typedef
使用
声明将使语法可读。a
typedef
使用
声明将使语法可读。我选择了使用typedef的方法,它可以工作。谢谢还有一个问题:希望在函数foo中创建输入参数arr的副本。我如何做到这一点?唯一“复制”数组的方法是将其放入堆中(通过
new
)。如果您创建一个局部变量并尝试从函数返回它,那么一旦函数结束,它就会被销毁,这是不好的。请记住,如果您使用
new
,则必须在之后对其使用
delete
,否则您将出现内存泄漏。我选择了使用typedef的方法,它可以工作。谢谢还有一个问题:希望在函数foo中创建输入参数arr的副本。我如何做到这一点?唯一“复制”数组的方法是将其放入堆中(通过
new
)。如果您创建一个局部变量并尝试从函数返回它,那么一旦函数结束,它就会被销毁,这是不好的。请记住,如果使用
new
,则必须在之后对其使用
delete
,否则将导致内存泄漏。