求问个c语言问题,为什么二维数组做参数引用时,数组要填下标,如图划线部位。而一维数组就可以不用填,

求问个c语言问题,为什么二维数组做参数引用时,数组要填下标,如图划线部位。而一维数组就可以不用填,缺省里面的数字呢... 求问个c语言问题,为什么二维数组做参数引用时,数组要填下标,如图划线部位。而一维数组就可以不用填,缺省里面的数字呢 展开
 我来答
642985327
2014-12-07 · TA获得超过763个赞
知道小有建树答主
回答量:156
采纳率:100%
帮助的人:108万
展开全部
比如一维数组作函数参数时:f(int a[10]) 会被转换成f(int *a),即传递过去的是一维数组的首地址。所以即使你有个数组 int b[5],也能传递进int [10]做参数的函数。
二维数组作函数参数时:f(int a[10][5]) 后面的那个维数会被丢弃,转换为,f(int (*a)[10]),
之所以要保留除了第一维以外的维数,是因为int (*a)[10]是一个指向10个int组成的数组的指针,而不是int* 指针。

这个很难理解的,你必须把指针学好,很多入门的C语言书上会有解释,想一下就懂是不可能的,慢慢理解。
文正153
2014-12-07 · TA获得超过2.1万个赞
知道大有可为答主
回答量:2221
采纳率:63%
帮助的人:607万
展开全部
不清楚你学指针没,如果学了这个问题就好说了.二维数组是一个二级指针,而一维数组就是一个普通的指针.二维数组其实也是一维的,只是它的一个元素还是一个数组.而一维数组要得到一个元素可以这样:*(p+i) 这样是完全等价于p[i]的.而二维数组想要得到它其中的一个元素就要这样:
int i[10][3];
i[1][2] == *(i + 10*1 + 2);
但如果说这个数组是int i[10][30];就不能通用上面的公式,所以如果得到一个二维数组的元素就要由类型来定.如上代码,i是一个int *[3]类型的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鲁步凝珍Qt
推荐于2018-03-21 · TA获得超过1396个赞
知道大有可为答主
回答量:1959
采纳率:50%
帮助的人:1256万
展开全部
二维数组做形参时可以省略第一个维度,第二个不能省
更多追问追答
追问
为神马=_=
追答
传递参数时实际传递的是指针,一维数组的名字已经是指针了。所以可以省略维度。
二维数组它的本质是数组里的元素也是数组。所以实际上数组名数组的指针。而数组指针必须有维度,所以第二个维度不能省略
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式