您的位置:首页 > 其它

二维数组与二维指针

2011-03-25 16:14 155 查看
1.二维数组的储存是线性的,可以通过一维指针的方式访问。

如一下代码:

int map[5][5] = {

1,2,3,4,5,

5,4,3,2,1,

-1,-2,-3,-4,-5,

-5,-4,-3,-2,-1,

-2,-1,0,1,2

};

int *mapd = & map[0][0];

则 map[i][j] == mapd[i*5+j];

而利用二维数组线性存储的特性,可以将二维数组当作一维指针方便的在函数之间传递

如:将一个二维数组赋值给一个动态二维数组,参数设置为一维指针

void fun( int* map, int width , int height )

{

// copy

for( usigned inti=0 ; i< width ; i++ ){

memcpy( mapd[i],map+i * height ,sizeof( _byte ) * height );

}

}

fun( &map[0][0],5,5 );

2.通过二维指针分配的内存单元,并不一定是线性的,因而无法用二维数组的方式进行访问。

int** map = ( int** ) malloc ( sizeof( int ) * n * n )

这样的代码将会产生恶劣的后果。生成的动态二维数组根本无法访问。

推荐的方法是以循环来分配/释放每一个子数组的空间,即

// alloc
map = new int * [mWidth];
for( usigned int i=0 ; i< mWidth; i++ )
{
map[i] = new int [mHeight];
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: