C++编程入门 互动版

动态存储分配

通常情况下,一旦定义了一个数组之后,数组大小都是在程序编译时分配的。就是说写代码时就要知道数组有多少元素。这种内存空间的分配方式称为静态分配。但数组大小在写代码时,往往是不确定的,这就需要一种能够动态分配内存的机制。C++提供了动态分配内存相关的两个操作符:new,delete

new

new用来申请分配内存空间,它的返回值是一个指针。new的格式为:new 数据类型 (初始值列表);或者是new 数据类型 [元素个数];例如:

int *p1,*p2;
p1=new int[10];
p2=new int(6);

第二行使用new创建了一个一维整型数组,有10个元素,并把第0个元素的地址赋值给p1。接下来就可以用p来操作该数组的元素了。

第三行使用new申请了一个存放int型数据的内存空间,并把该数据的内存地址赋值给p2。接下来就可以用*p2来操作该数据了。

delete

delete用来释放分配的内存空间,它的操作数是new返回值的指针,也就是说delete只能用来释放由操作符new申请的内存空间。注意new申请到的内存空间不用了话,要及时delete掉,这才是好的编程习惯。否则容易出现内存溢出的问题。

若new申请的是一般数据类型的内存,那么delete的格式为:delete 指针名;

若new申请的是数组,那么delete的格式为:delete[] 指针名;

看下面的简单示例:

int *p1,*p2;
p1=new int[10];
p2=new int(6);
delete[] p1;
delete p2;
在右侧代码框中编写程序:首先请用户输入整型数组元素的个数,然后输入数组,输出最大值。