您的位置:首页 > 编程语言 > C语言/C++

C++二维数组&指针

2013-05-02 09:51 288 查看
//------------------------------------------不同形式的数组指针的区别 ---------------------------------

C++中的指针和数据很让人头晕,尤其是二维的情形。
1、int** ptr;//声明指向“一群”指向整数指针的指针。可以理解成ptr

。(N表示若干,以下同)
2、int* ptr[5];//声明5个指向整数指针的指针,即ptr有5个指向"一群"整数的指针。可以理解成ptr[5]

3、int (* ptr)[5];//声明指向"一群"指向 5 个整数数组的指针的指针。 可以理解成ptr
[5]。

针对1,因为是指针的指针,需要两次内存分配才能使用其最终内容。
首 先,ptr = ( int ** )new int *[5];
这样分配好了以后,它和(2)的意义相同了;然后要分别对 5 个指针进行内存分配,例如: ptr[0] = new int[20];

针对2,上面已经说过,ptr[0] = new int[20]。

针对3,这个不好理解,它的意义是"一群" 指针,每个指针都是指向一个 5 个整数的数组。
如果想分配N个指针,这样写: ptr = ( int ( * )[ 5 ] ) new int[ 5*N]。这样ptr[0] 指向第 0 个 5 个整数数组的首地址,ptr[1] 指向第1个5个整数数组的首地址。

//------------------------------------------二维数组的创建 ---------------------------------
class A;
.......
A * ptr1 = new A[num]; //动态声明一维数组
A **ptr2; //动态声明二维数组
ptr2 = new A*[row] //申请row个指针,每个指针属于A*,即可指向一群A,待分配==21
for( int i = 0 ; i < row; ++i)
ptr2[i] = new A[vol];
//对每个指针进行动态分配,每个指针指向vol个A对象==2
//------------------------------------------二维数组的删除 ---------------------------------
二维数组的删除与申请的步骤刚好相反。
for( int i = 0 ; i < row ; ++ i)
delete [] ptr2[i];
//删除每行的对象,对应上面的==2
delete [] ptr2; //删除row个指针,对应上面的==1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: