前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言(二维数组)

C语言(二维数组)

作者头像
用户2617681
发布2019-08-08 16:11:01
3.2K1
发布2019-08-08 16:11:01
举报
文章被收录于专栏:秘籍酷秘籍酷

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

假如,有如下代码:

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两种正确定义,就不难理解了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秘籍酷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档