关于把二维数组做参数的问题

昨天在写程序的时候,碰到了老问题:二维数组做参数, 可把我整惨了。 不过最后也算解决了。

我是想用二维数组做参数,但是行和列的值由另外两个参数确定,但是要想用它做参数,列这个值要是已知的才行。

一开始直接把二维数组作为参数, 不用想,一编译就错:error C2087: '<Unknown>' :missing subscript。

既然不行就改啊,于是就把参数改成二级指针,唉,一编译,还是错:error C2664:cannot convert parameter 1 from 'int [2][3]' to 'int ** '

不能转换? 那就强制转换!果然强制转换后编译不报错了。 这下松了一口气。 谁知一运行,跳出一个框,内存访问错误。这下真的郁闷了(现在还不是很清楚为什么,有谁知道告知一下啊,感激不尽)。

天无绝人之路,最后终于找到了一种办法。
如:int a[2][3] = { 1, 2, 3, 4, 5, 6 };
函数 void f(int *p, int row, int col);

把二级指针改为了一级指针, 在传参数的时候可以这样 f(&a[0][0], 2, 3);可以这样访问数组中的元素:p[i * 3 + j] 代表a[i][j], 其中3是每列的元素个数。
下面是个简单的例子:

Code:
  1. #include <iostream>   
  2. using namespace std;   
  3.   
  4. void f(int *p,  int row, int col);   
  5.   
  6. int main(void)   
  7. {   
  8.     int a[2][3] = { 1, 2, 3, 4, 5, 6 };   
  9.     f(&a[0][0], 2, 3);   
  10.     return (0);   
  11. }   
  12. void f(int *p,  int row, int col)   
  13. {   
  14.     for (int i=0; i!=row; ++i)   
  15.     {   
  16.         for (int j=0; j!=col; ++j)   
  17.             cout << p[i * col + j] << " ";   
  18.         cout << endl;   
  19.     }   
  20. }  
  21.  


终于把问题给搞定了。。。
有谁有更好的办法,欢迎讨论~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值