【问题标题】:Passing Dynamic Two Dimensional Array as argument to a functoin in c++将动态二维数组作为参数传递给c ++中的函数
【发布时间】:2020-10-18 03:13:20
【问题描述】:

大家好,我实际上是在尝试在 c++ 中创建一个 2D 数组但无法创建,当我执行以下语句时

int arr=new int[10][10]

它给了我错误,当我在谷歌上搜索时,它显示 C++ 中的二维数组是指针数组,声明如下声明

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

我得到的逻辑是一个指向矩阵的指针,但现在我无法理解逻辑,比如我如何指向这个矩阵上的数据,假设看到索引中存储的数字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]

实际上我不知道如何在矩阵中使用指向指针的指针,与其他语言相比,它太复杂了,我们只需要使用new 运算符并可以使用它们的维度来访问它们,不需要这个指针指向指针的概念。请帮助我理解这个 2d 动态 c++ 数组的整个逻辑。

【问题讨论】:

  • 小测验:a 的类型是什么?这与displayArray 的参数必须是相同的类型。
  • 如果尺寸不同,如int[10][20],问题和答案会更清晰。不幸的是他们是一样的。
  • 我实际上试图在 c++ 中创建一个 2D 数组,但无法创建它 -- A much better way to do what you are asking
  • “与其他语言相比它太复杂了” - 这不一定是一个完全公平的比较。大多数其他语言根本无法做到这一点。这超出了他们的范围。这些是非常低级的数组结构,即使是大多数C++ 程序员也永远不需要使用。对于更等同于另一种语言的动态数组的东西,您应该查看std::vector&lt;int&gt; 的数组和std::vector&lt;std::vector&lt;int&gt;&gt; 的二维数组数组。

标签: c++ pointers dynamic-arrays pointer-to-pointer


【解决方案1】:

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

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);
}

它打印 10 行和值为 0 的列,因为二维数组未初始化

【讨论】:

    猜你喜欢
    • 2012-01-22
    • 2018-05-07
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多