[求助]做北大方正笔试题时碰到的,关于二维指针问题
不太记的清楚了。大致如下:
编写一个函数,原型为:
int f(int **pIntArray, int nRow, int nCol);
此函数的功能,我记不太清楚了。
然后将一个二维数组intArray[nRow][nCol]作为参数传入上述函数。如何传?
是f(intArray, nRow, nCol)?这样会出错的。
我在vc6.0里做了实验。请问高手,如何传参数?
[解决办法]
int f(int **pIntArray, int nRow, int nCol);
行参为二维指针,实参应该是&p
main()
{
int **p;
i=f(&p,nRow,nCol);
}
06年上半年的高程有这题
[解决办法]
int f(int **pIntArray, int nRow, int nCol);
不能直接用
intArray[nRow][nCol] 做参数
要
int f(int *pIntArray, int nRow, int nCol);
才可以直接用intArray做参数
[解决办法]
=================================================================================
然后将一个二维数组intArray[nRow][nCol]作为参数传入上述函数。如何传?
是f(intArray, nRow, nCol)?这样会出错的。
=================================================================================
intArray代表数组的首地址,不管其维数有多少,intArray都仅仅只相当于一个单指针
要想通过双指针来引用的话,就需要再通过一个中间变量单指针
如下:
main()
{
int *q;
q=(int *)intArray;或者q=intArray[0];或者q=(int *)&intArray;
i=f(&q,nRow,nCol);
}
[解决办法]
int f(int **pIntArray, int nRow, int nCol);
pIntArray的类型是int **,是一个指向指针的指针。
intArray[nRow][nCol]在实现上是一维数组,其所指向的数据根本就没有指针。
你真要按这个函数原型,需要再建一个数组,然后把二级指针拷进去:
int* ppInt[nRow]
for i in [0, nRow)
ppInt[i] = intArray[i]
对于声明成int**的参数,我就这么一个比较搓的方法。你可以参考楼上的改参数。
[解决办法]
这样的代码是合法的C代码,用C编译器可以正常的编译过去
注意是C编译器,不是C++编译器。如果用VC6的话,将扩展名改为C即可。
int f(int **pIntArray, int nRow, int nCol)
{
return 0;
};
int main()
{
int Array[10][20];
f(Array,10,20);
return 0;
}