数组类型的变量有三个重要的限制:数组长度不变,在编译时必须知道其长度,数组只在定义它的语句块内存在。实际的程序往往需要动态的分配数组。虽然数组长度是固定的,但动态分配的数组不必在编译时知道其长度,可以(通常是)在运行时才确定数组长度,与数组变量不同,动态分配的数组将一直在,知道程序显式释放它为止。
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和指针之间的空方括号对是必不可少的,它告诉编译器该指针指向的是自由存储区中的数组,而并非单个对象。如果遗漏空方括号,这是一个编译器无法发现的错误,将导致程序在运行时出错。
相关推荐
动态创建数组并且最后释放资源动态创建数组并且最后释放资源动态创建数组并且最后释放资源动态创建数组并且最后释放资源动态创建数组并且最后释放资源。
如何在VC中创建动态数组!!!!!!!!!!!!!!
autoit 解决二维数组动态赋值
本文讲述了如何用C语言也能创建动态数组的技巧,通过代码实例来演示分析,让你进一步了解数组的动态创建技巧与代码的艺术。
以 动 态 的 的 形 式 对 二 维 数 组 进 行 创 建 。
内附源代码 动态数组的使用快速创建数组(VB6.0代码编写) ~
如何在vc中创建动态数组建立一维的,二维的,动态数组
此实例解释了new动态创建多维数组的用法,还有包涵了多维数组指针的用法···
C++创建动态数组,注意有的编程软件会自动释放动态分配的内存
在c语言中动态创建二维数组,有效利用内存空间。
讲述js中动态创建关联数组的问题,并列举了两个例子来进行比较,消除您的所有误区。
利用C语言实现动态数组,能够实现建立动态数组在输入数组数字个数的情况下创建数组,运用指针动态申请空间
C++ C++ Builder中创建动态数组,分配内存,和C中类似。
关于linux数组定义,以及生成方法,请看:linux shell 动态生成 数组系列 seq使用技巧 。这里我主要说的是高效生成list 字符串,还有数组方法。 一、seq方法生成: [chengmo@centos5 shell]$ aNumList=$(seq ...
动态创建以为数组很简单,动态创建二维数组比较麻烦,这里提供代码,方便大家交流
mips assambly language的数组创建,如何输入数字和打印数字
(其中包含Halcon数据类型到C++中int转换(double,char同理的)、动态创建数组、释放数组内存)**需要有Halcon和C++点点基础就可以看懂,VC与Halcon联合环境已经配置,不会的可以百度配置,教程丰富**
(1)实现构造函数重载,可以根据指定的元素个数动态创建初始值为0的整型数组,或根据指定的内置整型数组动态创建整型数组。 (2)设计拷贝构造函数和析构函数,注意使用深拷贝。 (3)设计存取指定位置的数组元素...
OpenCV 指针的运用,以及图片的加载
c当中,经常需要我们创建动态二维数组。 但是尼,他不支持用变量申明二维数组啊QAQ。 所以,一个简单的创建动态二维数组。 免费送给大家~