关于二维数组传参

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

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

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

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

转载于:https://www.cnblogs.com/oulton/p/5682773.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值