C++二维数组&指针

本文详细解析了 C++ 中不同形式的数组指针的区别,包括 int**ptr、int*ptr[5] 和 int(*ptr)[5] 的含义及用法,并介绍了二维数组的创建与删除过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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

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 个指针进行内存分配,例如: 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值