关于二维数组传参

今天朋友遇到二维数组传参的问题,我便也跟着看了看,顺便也在网上查了点资料。

一维数组的传参比较容易,在这里就不介绍了。常用的都是二维数组,那么二维数组的传参一般分为三种方式:

第一种方式是直接传递数组,但是需要标明第二维的值,如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);
}
           

查资料也是自己学习的过程,加深了对二维数组的认识。以上如有不准确之处,还望指出。

posted @ 2016-07-18 21:52  天涯一缕清枫  阅读(1459)  评论(1编辑  收藏  举报