您好,欢迎访问三七文档
#includeiostreamusingnamespacestd;/************************************************************************动态数组的创建1、数组的限制1:数组的长度固定,编译时候必须知道数组的长度;2:数组只会在定义它的程序块{}中存在,一旦跳出{}程序块里面销毁,除了全局数组;3:在不明确知道数组所需要存放的内容时候,程序员必须创建一个较大的数组,可能造成内存浪费;2、动态数组的好处1、动态数组的长度不固定,根据程序所需长度变化;2、动态数组的大小只有在运行时候才知道,可以更具程序员的需要变化;3、动态数组只要分配了空间,只有显式释放,否则一直存在,与程序块的位置无关;3、动态数组的实现C语言利用macllo创建用free释放。C++利用new申请,delete释放;int*p=newint[expression];new表达式指定类型、长度(任意的表达式,运行时知道值即,不一定是常量表达式),并返回第一个内存单元的指针;内置类型的不需要初始化,类类类型会调用默认构造函数初始化;int*p=newint[20];//new10unitsuninitializeintegermemory;4、动态数组的初始化内置类型不需要初始化类类型调用默认的构造函数初始化申请的单元;string*psa=newstring[10];//arrayof10emptystringsint*pia=newint[10];//arrayof10uninitializedintsint*pia=newint[20]();初始化全部元素的值为0,不能像数组那样逐个初始化,括号里面不能传参;5、const对象的动态数组如果我们在自由存储区中创建的数组存储了内置类型的const对象,则必须为这个数组提供初始化:因为数组元素都是const对象,无法赋值。实现这个要求的唯一方法是对数组做值初始化:constint*pci_bad=newconstint[100];//error:uninitializedconstarrayconstint*pci_ok=newconstint[100]();//ok:value-initializedconstarrayC++允许定义类类型的const数组,但该类类型必须提供默认构造函数conststring*pcs=newconststring[100];//ok:arrayof100emptystrings6、int*p=newint[0];???创建长度为0的数组,什么鬼?告诉你!C++允许这样申请长度为0的数组;那么既然长度为0,那么返回的指针p虽然是一个有效的指针变量,但是由于内存单元为0,所以不能解引用操作!!!!没什么实际意义!!7、怎么释放申请的内存?delete函数帮您实现!int*p=newint[100];delete[]p;即可!!!!*************************************************************************/intmain(void){constintarray_size=20;int*pia=newint[array_size]();//加个括号默认初始化为0int*pid=newint[array_size];//不加括号的未初始化,值随机;intindex=0;memset(pid,0,array_size*sizeof(int));//清空内存区memset(pia,0,array_size*sizeof(int));while(indexarray_size){coutpia[index]=\t*(pia+index)endl;//值是确定为0index++;}index=0;while(indexarray_size){coutpid[index]=*(pid+index)endl;//值是不确定出现的,必须先注释掉上面的memset函数,否则都是0;index++;}/*学习初始化-----法1*/cout学习初始化--------------法1endl;index=0;while(indexarray_size){//coutpid[index]=*(pid+index)endl;//值是不确定出现的*(pid+index)=index++;}index=0;while(indexarray_size){coutpid[index]=*(pid+index)endl;//值是不确定出现的index++;}cout学习初始化--------------法2endl;memcpy(pia,pid,array_size*sizeof(int));coutpia:pia\tpid:pidendl;index=0;while(indexarray_size){coutpid[index]=*(pid+index)endl;//值是不确定出现的index++;}/**/index=0;while(indexarray_size){coutpia[index]=*(pia+index)endl;//值是不确定出现的index++;}delete[]pia;//只能释放一次,一定要释放,不然内存泄漏delete[]pid;return0;}
本文标题:动态数组的使用
链接地址:https://www.777doc.com/doc-2614679 .html