在c语言中,有的时候会需要传递一个二维数组给函数。然而直接传递二维数组并不像传递一维数组那样容易,我们最好是借用指针来传递二维数组。
要用指针传递二维数组,则必须对二维数组的储存方式有个了解。二维数组在内存中其实也是按照一个序列来排列的,毕竟内存只有高低之分,只有一个方向。因此,二维数组的储存实现是一行行来存储的,存完一行再存下一行,并且是紧挨着存储。
比如定义int a[3][4],那么每行有4个数,一共3行。用指针p来表示数组,int *p;*p = &a[0][0],那么要用p表示a[2][1],就是*(p+2*4+1),这样就能通过传递指针p和表示二维数组长度的数来传递二维数组。
1 /*测试用指针传递二维数组*/ 2 /*by telnetning 13.3.20*/ 3 4 #include <stdio.h> 5 6 /*函数求二维数组所有的数的和的大小*/ 7 int Sum(int *p,int i,int j){ 8 int m; 9 int n; 10 int s; 11 for(n=0;n<=i;n++){ 12 for(m=0;m<=j;m++){ 13 s=*(p+(n*3)+m); 14 } 15 } 16 return s; 17 } 18 int main(){ 19 int s; 20 int a[3][3]; 21 int i,j; 22 int k = 0; 23 24 /*指针p用来表示二维数组*/ 25 int *p = &a[0][0]; 26 p = a; 27 28 /*给二维数组的每一位赋予一个整数值*/ 29 for(i=0;i<=2;i++){ 30 for(j=0;j<=2;j++){ 31 *((p+i*3)+j) = k++; 32 } 33 } 34 /*求出并打印所有数的和*/ 35 s = Sum(p,3,3); 36 printf("%d",s); 37 return 0; 38 }
来源:https://www.cnblogs.com/telnetning/archive/2013/03/21/2956278.html