C++二维数组&指针


//------------------------------------------不同形式的数组指针的区别 ---------------------------------

C++中的指针和数据很让人头晕,尤其是二维的情形。
1、int** ptr;//声明指向“一群” 指向整数指针的指针。可以理解成ptr[N][N]。(N表示若干,以下同)
2、int* ptr[5];//声明5个指向整数指针的指针,即ptr有 5个指向"一群"整数的指针。可以理解成ptr[5][N]。
3、int (* ptr)[5];//声明 指向"一群"指向 5 个整数数组的指针的指针。 可以理解成ptr[N][5]。

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

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

针对3,这个不好理解, 它的意义是"一群" 指针,每个指针都是指向一个 5 个整数的数组。
如果想分配N个指针,这样写: ptr = ( int ( * )[ 5 ] ) new int[ 5*N]。这样p tr[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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值