【发布时间】:2018-11-23 08:26:35
【问题描述】:
显然这段代码有效
void printD(int * ar,int r)
{
for(int i = 0; i < r; i++)
cout<<ar[i]<<endl;
}
int main()
{
int ar[3] = {1,2,3};
printD(ar,3);
return 0;
}
但是这段代码不起作用
void print2D(int ** ar,int r,int c)
{
for( int i = 0; i< r;i++)
for(int j = 0; j < c;j++)
cout<<ar[i][j]<<endl;
}
int main()
{
int ar2[1][2] = {{3,1}};
print2D(ar2,1,2);
return 0;
}
我不明白为什么这不起作用?
【问题讨论】:
-
二维数组不是指向指针的指针。它是一个指向二维数组的指针。
-
这是比 C++ 更多的 C 代码(
cout除外)。如果你真的想使用 C++,你应该考虑使用标准容器 (std::vector)。并传递参考资料。 -
在 KR C 语言的旧时代,我们经常使用 int ar2[2][2] = {{3,1},{2, 4}} 之类的可怕的东西; print1D((int *) ar2, 4);不向孩子展示,但它正在工作......最好定义自己的矩阵类型,或使用库
-
前一个可怕的例子有助于理解为什么
ar[2][2]不是int **。
标签: c++ arrays pointers multidimensional-array