动态创建数组

数组类型的变量有三个重要的限制:数组长度不变,在编译时必须知道其长度,数组只在定义它的语句块内存在。实际的程序往往需要动态的分配数组。虽然数组长度是固定的,但动态分配的数组不必在编译时知道其长度,可以(通常是)在运行时才确定数组长度,与数组变量不同,动态分配的数组将一直在,知道程序显式释放它为止。

C语言使用一对标准的函数malloc和free在自由存储区中分配存储空间,而C++语言则使用new 和 delete 表达式实现相同的功能。

 

1.动态数组的定义

动态分配数组时,只需指定类型和数组长度,不必为数组对象命名,new 表达式返回新分配数组的第一个元素的指针。

int *pia = new int[10];

 此new表达式分配了一个含有10个int型元素的数组,并返回指向该数组的第一个元素的指针。

 

2.初始化动态分配的数组

动态分配数组时,如果数组元素类型是类类型,将使用类的默认构造函数实现初始化;如果数组元素是内置类型,则无初始化。

int *pia = new int[10];//无初始化
string *pia = new string[10];//string默认构造函数初始化

 也可使用跟在数组长度后面的一对空圆括号,对数组元素做值初始化

int *pia = new int[10]();//都初始化为0

 3.const对象的动态数组

const int *pia_bad = new const int[10];//错误
const int *pia_ok = new const int[10]();//正确

 C++允许定义类类型的const数组,但该类型必须提供默认构造函数

const string *pia_ok = new const string[10];//正确

 

4.动态控件的释放

动态分配的内存最后必须进行释放,否则内存最终将会逐渐耗尽。

C++语言为指针提供delete [] 表达式释放所指向的数组空间,delete [] pia_ok;

注意:在关键字delete和指针之间的空方括号对是必不可少的,它告诉编译器该指针指向的是自由存储区中的数组,而并非单个对象。如果遗漏空方括号,这是一个编译器无法发现的错误,将导致程序在运行时出错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值