`
Conviction
  • 浏览: 5872 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

动态创建数组

 
阅读更多

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

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics