二维数组作参数

这个问题曾经被困扰过,解决的办法是没解决,哈哈,意思就是直接将函数参数设为二维数组的原型。比如一个map[HEIGHT][WIDTH]的二维数组要传入一个函数中,则这个函数就这样被写死了:
void getSZ(int _map[HEIGHT][WIDTH]);
传入的数组的宽(二维数组的第二维大小)就被固定了,其他任何宽度的二维数组也不能被这个函数所接收。

今天本来想搜下其他的问题,但无心插柳,让我找到了如何方便地将“二维数组作参数”。做法如下:
可以设计函数原型为:void getSZ(int** pMap, int height, int width);
这样如何?然后如果要取得其中(i,j)位置的元素可以:(int*)pMap+width*i+j

我在设计a*寻路算法时是这样使用的:
PathFinding类中
AStarNode** m_Map;//地图数据,也就是二维数组
SIZETYPE m_nMapHeight, m_nMapWidth;// 保存地图的深度与宽度,也就是二维数组的大小
该类的Init方法:
void Init(AStarNode** map, SIZETYPE height, SIZETYPE width)
{
m_Map =map;
m_nMapHeight= height;
m_nMapWidth= width;
}
之后如果要使用该数组中的元素不可能每次都要输入那么一长串的东西吧?所以可以封装到一个inline函数中:
inline AStarNode* Map(POSTYPE height , POSTYPE width)
{
return((AStarNode*)m_Map + m_nMapWidth*height + width);
}
这样就方便多了,不仅可以传入任意宽度的二维数组,在管理维护时也会方便很多。

具体参考连接:http://ziji.yo2.cn/archives/628720

发表评论

邮箱地址不会被公开。 必填项已用*标注

* Copy This Password *

* Type Or Paste Password Here *