4.7.6 使用 new 来创建动态数组

使用 new 来创建动态数组

通常对于大型数据(如数组、字符串和结构)应使用new。

在创建数组时,指定长度;在编译时给数组分配内存被称为静态联编。(不管用不用,都会占用内存)

使用new时,如果在运行阶段需要数组,则创建它;如果不需要,则不创建。还可以在程序运行时选择数组的长度。这被称为动态联编。意味着数组是在程序运行时创建的。这种数组叫做动态数组。在运行时确定数组的长度。

int* p = new int[10]; // new运算符返回第一个元素的地址。

delete [] p; // 释放整个数组,new如果带[] 则delete也需要带[]

使用new和delete时,应遵守以下规则

● 不要使用delete来释放不是new分配的内存

● 不是使用delete释放同一个内存块两次

● 如果使用new[]为数组分配内存,则应使用delete[]来释放。

● 如果使用new[]为一个实体分配内存,则应使用delete(没有方括号)来释放。

● 对空指针应用delete是安全的

使用动态数组

把指针当作数组名使用

int main()

{

using namespace std;

int* p = new int[3]; // new运算符返回第一个元素的地址。

p[0] = 10;

p[1] = 9;

p[2] = 8;

for (int i = 0; i < 3; i++) {

cout << p[i] << endl;

}

*p = 20;

*(p+1) = 19;

*(p+2) = 18;

for (int i = 0; i < 3; i++) {

cout << p[i] << endl;

}

*p = 30;

*(++p) = 29;

*(++p) = 28;

p-=2; // 需要提供delete正确的地址

for (int i = 0; i < 3; i++) {

cout << p[i] << endl;

}

delete [] p; // 释放整个数组,new如果带[] 则delete也需要带[]

return 0;

}

🔚