为了账号安全,请及时绑定邮箱和手机立即绑定

如何将二维数组传入二维指针中?

如何将二维数组传入二维指针中?

拉丁的传说 2019-04-07 09:38:28
有个函数voidf(int**mat,intm,intn)如何将一个数组,比如说是inta[3][4]正确的传进去?如果直接使用f((int**)a,3,4)来调用的话,函数里面直接写mat[i][j]的话会报错。请问应该如何操作?
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

如果f要接收一个二维数组做参数,而且需要数组的长度信息的话,那么原型应该是这样:
voidf(int**array,intm,intn);
调用的时候:
intarray[3][4];
f(array,3,4);
这个问题的关键大概在于,intarray[3][4]这样定义的变量确实是数组类型(int[3][4]),而且这个是有长度信息的(用sizeof是可以取到正确的长度的).
但是当数组作为函数参数的时候,将会退化为一个纯粹的指针,无法区分是否是数组,也无法携带长度信息。
                            
查看完整回答
反对 回复 2019-04-07
?
侃侃无极

TA贡献2051条经验 获得超10个赞

也可以这样定义函数:
voidf(inta[][4],intm)
{
...
}
不过即使这样,也传的不是数组,如楼上所说,a退化成一个指针。C不支持传数组做参数的。
sizeof(a)得到的是4,即一个指针的字节数。
                            
查看完整回答
反对 回复 2019-04-07
  • 2 回答
  • 0 关注
  • 475 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信