[转]二维数组参数传递
http://blog.csdn.net/hanpingliang/article/details/3380351
变量在作用域里面被声明的是什么类型,就当作什么类型来用。
(1)参数是二维数组,但是要指定第二维的维数。
int array[10][10];
函数声明:void fuc(int a[][10]);
函数调用:fuc(array);
——在函数fuc中,a是二维数组。使用a[i][j]形式来访问数组中元素。
(2)参数使用一维指针数组。
int *array[10];
for(i = 0; i < 10; i++)
array[i] = new int[10];
函数声明:void fuc(int (*a)[10]); //传递参数为指向数组的指针(此处不可写成 int *a[10],则表示为指针数组)
函数调用:fuc(array);
——在函数fuc中,a是一维指针数组。使用*(a[i] + j) 或 a[i][j] 方式来访问数组中元素。
(3)参数使用指针的指针。
int **array;
array = new int *[10];
for(i = 0; i <10; i++)
array[i] = new int[10];
函数声明:void fuc(int **a);
函数调用:fuc(array);
——在函数fuc中, a是指针的指针。使用*(int *)(a + i*d2 + j)形式来访问数组中元素,而不能够使用下标方式来读取a[i][j],则会报错。因为,二维数组,只退化指向数组的指针,而不是二维指针。因此,只能通过计算其位置而访问数据。