二维数组与二维指针
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];
};
如一下代码:
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];
};
相关文章推荐
- 二维指针、二维数组、指向数组的指针 函数参数传递
- 复习指针数组以及如何把二维数组赋值给二维指针
- C语言中二维数组、二维指针、指向指针的数组、指向数组的指针
- 关于二维数组和二维指针的相关问题
- 一维指针和二维指针指向二维数组的一些问题
- 指针二维二维数组和二重指针 的疑问 二维数组名为什么不能直接赋值给二重指针
- 二维数组和二维指针在CUDA中的应用
- 二维指针,二维数组,以及指向数组的指针的相关问题
- 二维数组和二维指针的传递问题
- 二维指针和二维数组
- 二维指针创建堆级别的二维数组
- 二维指针与二维数组
- 二维指针,二维数组,以及指向数组的指针的相关问题
- 二维指针不能指向二维数组
- 二维指针与二维数组研究
- C/C++二维数组的参数传递与二维指针
- 二维指针和二维数组
- 关于二维数组与二维指针传递参数
- C_C++_二维数组与二维指针的地址与访问关系
- 二维指针,二维数组,以及指向数组的指针的相关问题 .