c语言中提供的是malloc和free两个系统函数, 完成对堆区内存的申请和释放。而c++则提供了两个关键字new和delete。
1、new/new []用法
(1)、开辟单变量的地址空间
int *p=new int;//开辟大小为sizeof(int)空间,相当于c语言中:int *p=(int *)malloc(sizeof(int));
int *a=new int(5);//开辟大小为sizeof(int)空间,并初始化为5
(2)、开辟数组空间
一维: int *a=new int[100] {0};//开辟一个大小为100的整型数组空间
int **p=new int*[5]{NULL};
二维: int (*a)[6]=new int[5][6];
三维: int (*a)[5][6]=new int[3][5][6];
四维及以上:依次类推。
2、delete/delete []用法
(1)、int *a=new int;
delete a;//释放单个int的空间
(2)、int *a=new int[5];
delete []a;//释放int数组空间
3、综合用法实例:
#include <iostream>
#include<string.h>
using namespace std;
int main()
{
int *p=new int(5);//开辟大小为sizeof(int)空间,并初始化为5
cout<<*p<<endl;
delete p;
char *pp=new char[10];//开辟一个大小为10的字符型数组空间
strcpy(pp,"china");
cout<<pp<<endl;
delete []pp;
string *ps=new string("china");
cout<<*ps<<endl;
cout<<ps<<endl;//输出指针首地址
delete ps;
char **pa=new char*[5];//开辟一个大小为5的字符型指针数组空间
memset(pa,0,sizeof(char*[5]));
pa[0]="china";
pa[1]="america";
char **pt=pa;
while(*pt)
{
cout<<*pt++<<endl;
}
delete []pt;
int (*q)[3]=new int[2][3];//开辟一个大小2x3的整型二维数组空间
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
q[i][j]=i+j;
}
}
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
cout<<q[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
delete []q;
int (*qq)[3][4]=new int[2][3][4];//开辟一个大小2x3x4的整型三维数组空间
delete []qq;
return 0;
}