首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

[]做北大方正笔试题时碰到的,关于二维指针有关问题

2012-02-07 
[求助]做北大方正笔试题时碰到的,关于二维指针问题不太记的清楚了。大致如下:编写一个函数,原型为:intf(int

[求助]做北大方正笔试题时碰到的,关于二维指针问题
不太记的清楚了。大致如下:

编写一个函数,原型为:
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;
}

热点排行