一. new用法
1. 分配单变量地址空间
- 一般格式:指针变量名 = new 类型标识符;
- 格式2:指针变量名 = new 类型标识符(初始值);其在内存分配成功后,同时将一初始值存放到该内存单元中。
2.分配数组空间
- 一维数组格式:指针变量名 = new 类型名[下标表达式];
二.delete用法
1.删除单变量地址空间
- delete 指针变量名;
2.删除数组空间
- 一维数组格式:delete []指向该数组的指针变量名;delete的方括号中无需填数组元素数,系统自己知道,写了编译器也忽略。若此处少了方括号,则编译器认为该指针只是指向数组第一个元素,而产生回收不彻底的问题。
三.二维数组的new和delete
例如二维数组int array[a][b]
-
方式一
此方法要求b必须是常量(在编译期间即可确定值),这时new int[a][5]和new int[a]就没有什么区别了,只是数组的元素类型由int变为了int[5],因为只有一个变量所以本质上是一维数组,delete的时候直接delete []array就好了。
int i, j, a;
int (*array)[5] = new int[a][5];//array相当于是一级指针,指向的是int [5]类型
for(i=0; i<a; i++)
{
for(j=0; j<5; j++)
{
cin>>array[i][j];
}
}
delete []array;
-
方式二
其为标准的二维数组分配和删除空间的方法,即new和delete的时候都要层层操作。先创建一个一维数组用来存指针,然后再分别对该数组中的每个指针创建数组,即为二维数组。delete的时候先分别delete内层每个指针的数组,再delete为指针分配的数组。二维数组delete不需要知道b的值,但要知道a的值。
int **array = new int*[a];
for(i=0; i<a; i++)
{
array[i] = new int[b];
}
for(i=0; i<a; i++)
{
for(j=0; j<b; j++)
{
cin>>array[i][j];
}
}
for(i=0; i<b; i++)
{
delete []array[i];
}
delete []array;