关于动态内存分配
在程序运行中,对于相应的变量或数组,需要多少空间,则动态地分配多少内存空间,这显然能够提高程序运行的效率
用new运算符实现动态内存分配
(1)new分配一个变量
格式如下,T为变量类型名,P为类型为T * 的指针。
int * P;
P = new T;
可以动态分配出一篇大小为sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给P。
动态分配的结果是得到一个指针
例如:
int * pn;
pn = new int;
* pn = 5;
(2)new分配一个数组
格式如下,P是类型为T * 的指针,T为数组中元素的类型名,N为要分配的数组的元素个数,可以是表达式,也可以是整形常量。
int * P = new T[N];
可以动态分配出一篇大小为sizeof(T)*N字节的内存空间,并且将该内存空间的起始地址赋值给P。
一个使用实例:
int * pn;
int i = 5;
pn = new int[i*20];
pn[0] = 20;
通过delete运算符释放动态分配到的内存
对于new出来的变量,可以使用delete运算符对内存空间进行释放,且delete作用的对象也只是new出来的空间,delete只进行一次。
一个delete变量与变量数组的实例:
int * p1 = new int;
int * p2 = new int[20];
* p1 = 5
p2[0] = 10;
delete p1;
delete [] p2;
注意,对于delete一个数组的情况,采用“delete+ [ ] +数组名”的格式。