关于二维数组传参
今天朋友遇到二维数组传参的问题,我便也跟着看了看,顺便也在网上查了点资料。
一维数组的传参比较容易,在这里就不介绍了。常用的都是二维数组,那么二维数组的传参一般分为三种方式:
第一种方式是直接传递数组,但是需要标明第二维的值,如a[][3];
第二种方式是传递指针数组,同样也需要标明第二维的值,如(*a)[3];
第三种方式是传递指针;
具体实现请参考代码:
//关于二维数组传参的问题 #include<stdio.h> #define N 3 //第一种方式:直接传递数组 void getsum1(int[][N]); //第二种方式:传递指针数组 //void getsum2(int (*)[N]); //第三种方式:传递指针 void getsum3(int **,int,int); int main() { int a[N][N]={1,2,3, 4,5,6, 7,8,9}; getsum1(a); //getsum2(a); getsum3((int**)a,N,N); return 0; } void getsum1(int a[][N]) //方式1 //void getsum2(int (*a)[N]) //方式2 { int i,j; int sum=0; for(i=0;i<N;i++) for(j=0;j<N;j++) sum+=a[i][j]; //以数组形式访问 //sum+=*(*(a+i)+j); //以指针形式间接访问 printf("%d\n",sum); } void getsum3(int **a,int rows,int cols) //方式3 { int i,j; int sum=0; for(i=0;i<N;i++) for(j=0;j<N;j++) sum+=*((int*)a+i*rows+j); //这里需要进行(int*)强制转化,不能直接用参数名a printf("%d\n",sum); }
查资料也是自己学习的过程,加深了对二维数组的认识。以上如有不准确之处,还望指出。