问题描述
伙计们,我实际上是在尝试用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