将动态二维数组作为参数传递给c ++中的functoin

问题描述

伙计们,我实际上是在尝试用c ++创建2D数组,但是当我执行以下语句时却无法创建它。

int arr=new int[10][10]

它给了我错误,当我在Google上搜索时,它显示了我在c ++中的2D数组是指针数组,其声明类似于以下语句

int** a = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
    a[i] = new int[colCount];

我得到的逻辑是a,它是指向矩阵的指针,但是现在我无法理解该逻辑,例如我如何指向该矩阵上的数据,假设看到索引{{1 }}我应该写

a[0][0]

或者不是,我无法获得当指针指向矩阵时该指针的指针将如何工作的逻辑,还有一件事是我无法将其作为参数传递给函数。下面给出了将其作为参数传递的代码

cout<<a[0][0]

它给了我以下错误

void displayArray(int a[10][10])
{
        for (int i=0; i<10; i++)
    {
        for(int j=0; j<10; j++)
        {
            cout<<*a[i][j]<<"\t";
        }
        cout<<endl;
    }
}

int main()
{
    int** a = new int*[10];
    for(int i = 0; i < 10; ++i)
        a[i] = new int[10];

    displayArray(**a);
}

实际上,我对如何在矩阵中使用指向指针的方法一无所知,与其他仅需使用error: invalid conversion from ‘int’ to ‘int (*)[10]’ [-fpermissive] 运算符并可以按其尺寸访问它们的语言相比,它太复杂了,不需要此指针的指针概念。请帮助我理解c ++二维动态数组的整个逻辑。

解决方法

您需要在函数中获取参数作为指针

void displayArray(int **a)
{
        for (int i=0; i<10; i++)
    {
        for(int j=0; j<10; j++)
        {
            cout<< a[i][j] <<"\t";
        }
        cout<<endl;
    }
}

int main()
{
    int** a = new int*[10];
    for(int i = 0; i < 10; ++i)
        a[i] = new int[10];

    displayArray(a);
}

因为2D数组未初始化,它会打印10行和0列的值0