Possible Duplicate:
How do I use arrays in C++?
如何通过指针将二维数组传递给 C++ 中的函数。
当我尝试下面的代码时出现以下错误。
错误:无法将参数“1”的“int (*)[10][10]”转换为“int **”到“void fn(int **)”
void fn(int **a)
{
cout<<a[0][0]<<" "<<a[0][1];
}
int main()
{
int A[10][10];
A[0][0]=1;
A[0][1]=2;
fn(&A); //????
}
按照您的方式创建的二维数组在内存中是连续的。编译器需要知道每个段的大小,以便能够将指针移动到函数中的下一个段。编写 fn(int (*a)[3])
或 fn(int a[][3])
是等效的。但是让我们举个例子
char a[3][3];
a[0][0] = 01;
a[0][1] = 02;
a[0][2] = 03;
a[1][0] = 04;
a[1][1] = 05;
a[1][2] = 06;
a[2][0] = 07;
a[2][1] = 08;
a[2][2] = 09;
会变成
|01|02|03|04|05|06|07|08|09|
在内存中。
因此,如果您将 a
传递给一个函数,它需要知道它必须将 a
ptr 增加 3 * sizeof(a)
访问 a[1][0]
。
简而言之:函数的原型(prototype)需要是 void fn(int a[][10])
或 void fn(int (*a)[10])