如何 return 二维数组 C++

How to return 2d array C++

我有一个函数需要 return 一个二维数组,我是 c++ 的新手,但我搜索了很多,我得到的最好的是,它给出了“错误:无法转换 'int** (*)[3]' 到 'int**' 在 return".

int** initial_state()
{
    int arr[3][3] =
        {
            {0, 0, 0},
            {0, 0, 0},
            {0, 0, 0}}
        ;

    return arr;
}

更好的选择是使用 std::vector 并简单地 returning vector<vector<int>>。为了使用 vector,您需要包含库 vector。 (#include<vector>)

代码如下:

vector<vector<int>> initial_state()
{
    vector<vector<int>> arr
    {
        {0, 0, 0},
        {0, 0, 0},
        {0, 0, 0} 
    };

    return arr;
}

如果必须使用return二维数组,则需要将数组声明为动态数组。

int** initial_state()
{
    //Create an array of pointers with size 3.
    int** arr = new int* [3];

    //Each pointer points to an array with size 3.
    for (int i = 0; i < 3; i++)
    {
        arr[i] = new int[3];
    }

    //Fill the 2d array with values.
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            arr[i][j] = 0;
        }
    }

    return arr;
}

您可以使用 auto 关键字执行类似的操作,如本例所示:

auto make_array() {
    int arr[3][3];
    return arr;
}

它实际上是一个指向 int 的指针数组,但它确实有效。