在堆上分配内存
基本语法1:
类型标识符 *指针变量名 =new 类型标识符(初值);
也可以为一个指针分配一个数组大小内存,并将首地址赋值给指针变量。
语法2:
类型标识符 *指针变量名=new 类型标识符[size] ;
注:不可在分配的时候进行初始化。
内存的主动释放:
delete 指针名; //释放语法1分配的内存
delete []指针名; //释放语法2分配的内存
注:在将内存释放以后,不可以在重新分配之前再操作这个指针,否则其它指针申请
分配内存时,会产生不可知的错误。
测试程序:
#include <iostream>
using namespace std;
//在堆上分配内存
int main()
{
int *p=new int(3);//分配单个int类型所占字节数,交将首地址赋值给p
cout<<*p<<endl;
delete p;
//*p=10; 如果多了这一句就会出现错误,
int *arr_p[3];
for(int i=0;i<3;i++)
{
arr_p[i]=new int(i);//仍然是为每一个指针分配一个int类型所占字节数,将首地址赋值给指针变量
cout<<*arr_p[i]<<endl;
delete arr_p[i];//使用完一次马上释放。
}
int *p2=new int[10];//一次性分配10个int类型数据所占的字节数,并将首地址赋值给指针变量,不可进行初始化
for(int i=0;i<10;i++)
{
*(p2+i)=i+1;
cout<<*(p2+i)<<endl;
}
delete []p2;//释放
}