C语言(二维数组)

有同学在面对二维数组的时候,常常会犯浑。尤其是使用函数传参的时候,有老师讲到一维数组传参后就等价于一级指针,部分同学举一反三自学成才,想当然地认为二维数组传参后就等价于二级指针,这是错误的。

假如,有如下代码:

int a[2][3]; // 一个二维数组

function(a); // 将二维数组传参给一个函数

 

上述代码中,就是将一个二维数组传递给一个函数,那么这个函数怎么接受这个参数呢,答案是这样的:

void function(int a[2][3]) // 这是对的

}

void function(int (*a)[3]) // 这也是对的

}

 

千万别写成这样:

void function(int **a) // 这是错的

}

 

究其原因,还是回到以前提过多次的数组与指针的结论:任何数组,都将被一律视为一个指向其首元素的指针。因此以下两行代码是等价的:

function(a);

function(&a[0]);

 

对于二维数组 int a[2][3] 而言,其首元素就是一个 int [3] ,因此&a[0]就是一个指向 int [3] 的指针,其类型当然是 int (*)[3] 了。这样再来看上述的function两种正确定义,就不难理解了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

干燥剂007860

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值