【C/C++】用指针实现二维数组的传递、使用的4种示例,及各种变形。

请看例程。

#include <stdio.h>
#include <stdlib.h>

/*
 *func1:用int a[]传递二维数组
 *func2:用int a[][10]传递二维数组
 *func3:用int *a[10]传递二维
 *func4:用int (*a)[10]传递二维数组,但和func3不同,而与func2相同
*/
int func1(int a[])//等价声明写法int func1(int *a);而不是int func1(const int *a);
{
    /*以下等价,作用都是将arr1[0][3]赋值为80*/
    a[3]=80;
    *(a+3)=80;

    /*以下等价,作用都是将arr1[2][3]赋值为120*/
    a[2*10+3]=120;
    *(a+2*10+3)=120;
    *(a+3+2*10)=120;
    *(&a[3]+2*10)=120;
    (&a[3])[2*10]=120;
    3[a+2*10]=120;
    (3+2*10)[a]=120;
    a++;a[2+2*10]=120;//这一条说明了a是可变的,a不是const

    //编译错误的写法:a[2][3]=120;

    return 0;
}
int func2(int a[][9])
{
    /*以下等价,作用都是将arr2[2][1]赋值为1*/
    a[2][3]=1;
    *(a[2]+3)=1;
    *(*a+2*9+3)=1;

    /*以下等价,作用都是将arr2[2][3]赋值为2*/
   
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值