昨天在写程序的时候,碰到了老问题:二维数组做参数, 可把我整惨了。 不过最后也算解决了。
我是想用二维数组做参数,但是行和列的值由另外两个参数确定,但是要想用它做参数,列这个值要是已知的才行。
一开始直接把二维数组作为参数, 不用想,一编译就错: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是每列的元素个数。
下面是个简单的例子:
- #include <iostream>
- using namespace std;
- void f(int *p, int row, int col);
- int main(void)
- {
- int a[2][3] = { 1, 2, 3, 4, 5, 6 };
- f(&a[0][0], 2, 3);
- return (0);
- }
- void f(int *p, int row, int col)
- {
- for (int i=0; i!=row; ++i)
- {
- for (int j=0; j!=col; ++j)
- cout << p[i * col + j] << " ";
- cout << endl;
- }
- }
终于把问题给搞定了。。。
有谁有更好的办法,欢迎讨论~