关于二维数组作为参数传递给函数的问题

刚碰到要写一个函数func,要传入一个二维数组给该函数,于是写成func(int a[][]);但马上又发现将二维数组传给函数时必须指定第二维的维数,因为函数传递的是一个指向一个一维数组的指针,这个一维数组中存储有着若干元素的数组,所以函数必须要知道这个指针所指向对象的信息,在这里表现为这个被指向的一维数组中的基本元素(即数组)所含元素的个数,也就是说必须指定第二维的维数,不然编译器不知道该如何定位二维数组中的元素。

于是就写成func(int a[][n]);但是问题又来了,这个n是取决于用户输入的,也就是说要在运行期才能知道n的确切数值,而编译器要求在编译期必须知道数组元素的大小,于是就只有写成如下这个不伦不类的东西  func(int** a); 这时如果要在func函数内操作“二维数组”a,不能直接用下标a[i][j] ,(我也不知道确切为什么,可能是因为编译器无法寻址到这个元素,因为毕竟二维数组和指向指针的指针在内存中的存储方式还是有区别的嘛),所以如果我们要访问数组的某个元素,则必须自己做编译器干的事,即这样:*((int *) a+n*i+j)其中n表示第二维长度,(感觉怪怪的,不知道还有没更好的办法),同时还有个地方要注意的就是,在调用func函数时,实参必须是int**类型的 ,如果定义的是a[i][j]这样的类型,则需强制转换func((int**)a);才能调用。

我觉得这样的操作很不方便,不知道还有没有更好的操作二维数组做参数传递的方法,希望补充赐教。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值