暴露的问题:
(1):对指针数组形成二维数组的理解不深
(2):对普通指针与指针数组的内存情况产生混淆
(3):对new生成的二维数组的delete方法
问题(1):指针数组构建二维数组的原理:
心得理解: ①:指针数组本身就形成了一层数组,若要形成二维数组,仅仅需要新增一层数组内存
②:所以单纯的指针变量若要形成二维数组,需要形成两层数组(形成指针数组–>形成二维数组)
问题(2):普通指针与指针数组内存情况混淆
(√):
int **p; //定义双层指针;
//【1】正确的写法
//****①分配指针数组内存
p=new int*[n];
//****②由指针数组生成二维数组
for(int i=0;i<n;i++)
{
p[i]=new int[n]; //开辟第二层(非指针内存)
}
//【2】错误的写法
//****①:混淆双层指针与指针数组的内存情况
for(int i=0;i<n;i++)
{
p[i]=new int[n];
}
//原因分析: 双层指针只分配有单一内存(4个字节),而没有分配相应的内存。
//*****②:混淆动态开辟内存的原理:
错误: int **p=new int[n];
分析: (1)int *p=new int[20]:(右侧返回了一个新开辟的地址,所以用指针变量接受)
分析: (2)int **p; //指向指针的指针,由上面分析可知,新开辟的内存应该由一层指针接受,所以**不能直接接受
问题(3):如何delete new开辟的动态数组
【1】:由指针数组动态生成的二维数组
for(int i=0;i<n;i++)
{
delete []p[i]; //由于每个元素都开辟了新的内存空间
}
【2】:由双层指针形成的二维数组
for(int i=0;i<n;i++)
{
delete []p[i]; //撤销数组元素生成的指针数组
} //
delete []p; //撤销生成的指针数组
来源:CSDN
作者:冠long馨
链接:https://blog.csdn.net/koulongxin123/article/details/103550763