- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
*;对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。
对于不能确定需要占用多少内存的情况,动态内存分配解决了这个问题。
C/C++定义了4个内存区间:代码区,全局数据区,栈区,堆(heap)区。;通常定义变量时,编译器在编译时根据该变量的类型,在适当的时候为他们分配所需的内存空间大小。这种内存分配称为静态存储分配。
但有些操作只有在程序运行时才能确定,这样编译器在编译时就无法为他们预定存储空间,只能在程序运行时,系统根据运行时的要求进行内存分配,这种方法称为动态存储分配。所有动态存储分配都在堆区中进行。
;全局变量
静态数据
常量; 当程序运行到需要一个动态分配的变量或对象时,必须向系统申请取得堆区中的一块所需大小的存储空间,用于存储该变量或对象。
当不再使用该变量或对象时,也就是它的生命结束时,要显式释放它所占用的存储空间,这样系统就能对该堆空间进行再次分配,做到重复使用有限的资源。 ;在C++中,申请和释放堆中分配的存储空间,分别使用new和delete这两个运算符来完成,其使用的格式如下:
指针变量名=new 类型名(初始值);
delete 指针名;
new运算符返回的是一个指向所分配类型变量(对象)的指针。对所创建的变量或对象,都是通过该指针来间接操作的,而动态创建的对象本身没有标识符名。
;一般定义变量和对象时要用标识符命名,称命名对象,而动态的称无名对象。
new表达式的操作序列如下:从堆区分配对象,然后用括号中的值初始化该对象。从堆区分配对象时,new表达式调用库操作符new()。例如:
int *pi=new int(0);
说明:pi现在所指向的变量是由库操作符new()分配的,位于程序的堆区中,并且该对象未命名。 ;;使用new运算符时必须已知数据类型,new运算符会向系统堆区申请足够的存储空间,如果申请成功,就返回该内存块的首地址,如果申请不成功,则返回零值。
一般格式
格式1:指针变量名=new 类型标识符;
格式2:指针变量名=new 类型标识符(初始值);
格式3:指针变量名=new 类型标识符 [内存单元个数];
说明:格式1和格式2都是申请分配某一数据类型所占字节数的内存空间;但是格式2在内存分配成功后,同时将一初值存放到该内存单元中;而格式3可同时分配若干个内存单元,相当于形成一个动态数组。;【例9-1:利用new对变量进行分配空间】
#include iostream
using namespace std;
void main()
{
char *pc;
int *pi;
pc=new char;
pi=new int(8);
*pc=a;
coutpcendl;
cout*piendl;
}; 对于数组进行动态分配的格式为:
指针变量名=new 类型名[下标表达式];
delete [ ] 指向该数组的指针变量名;
两式中的方括号是非常重要的,两者必须配对使用,如果delete语句中少了方括号,因编译器认为该指针是指向数组第一个元素的指针,会产生回收不彻底的问题(只回收了第一个元素所占空间),加了方括号后就转化为指向数组的指针,回收整个数组。
delete [ ]的方括号中不需要填数组元素数,系统自知。即使写了,编译器也忽略。
请注意“下标表达式”不是常量表达式,即它的值不必在编译时确定,可以在运行时确定。;【例9-2:new 运算符为数组分配空间】
void main()
{
char * string=new char[20];
char str[20];
strcpy(string,It is a string.);
strcpy(str,It is a string too.);
coutstringendl;
coutstrendl;
}
问:内存区域中,栈区怎么变化?堆区怎么变化?;I;【例9-3:动态数组的建立与撤销】
void main(){
int n;
char *pc;
cout请输入动态数组的元素个数endl;
cinn; //在运行时确定,可输入17
pc=new char[n];
//申请17个字符(可装8个汉字和一个结束符)的内存空间
strcpy(pc,堆内存的动态分配);
coutpcendl;
delete []pc; //释放pc所指向的n个字符的内存空间
};使用new运算符分配的内存一定要释放,否则会产生系统内存泄漏。如:;a;void main()
{ char *pc=NULL;
int *pi;
pc=new char;
pi=new int(8);
您可能关注的文档
- Book1U3Reading词汇.ppt
- book5U1课后阅读与写作.ppt
- BPCS的ERP培训部分资料.ppt
- BRC消费品标准介绍.ppt
- bx2tz2民族工业的兴起.优.ppt
- BusinessEtiquette商务礼仪.ppt
- b原子、分子及元素周期性.ppt
- b我国的基本经济制度128.ppt
- b新时代的劳动者136.ppt
- B超诊断设备注册指导原则.ppt
- TZSM-校史馆展览展示工程服务规范及编制说明.pdf
- TSEEPLA-生态环境标准实施评估指南及编制说明.pdf
- 化妆品中羟吡啶酮的测定 高效液相色谱法编制说明.pdf
- QJKL023-2020 佳木斯市恺乐农药有限公司企业标准240gpL乳氟禾草灵乳油.pdf
- QHTY031-2020 过氧化氢分解仪.pdf
- TGLAC-基于北斗的智能网联车载设备技术要求及编制说明.pdf
- QALKS0001-2020 新能源车用机械式变速器总成台架试验标准.pdf
- TSSM-基于计量方法学的碳排放核算指南 铝冶炼企业及编制说明.pdf
- 产品碳足迹评价规范 污泥干化焚烧系统集成装备及编制说明.pdf
- DBS333018-2024 食品安全地方标准 藕粉生产卫生规范.pdf
最近下载
- T∕CACM 1021.135-2018 中药材商品规格等级 桑椹.docx VIP
- 合肥南站枢纽方案.pdf
- 内蒙古自治区包头市昆都仑区2023-2024学年七年级下学期期中语文试题【含答案解析】.docx VIP
- 公司年度颁奖晚会主持词与公司年终工作总结2合集.doc VIP
- GB/T 27726-2011_热塑性塑料阀门压力试验方法及要求.pdf
- 医学生全国水平测试题库.pdf
- 2025年东莞实业投资控股集团有限公司招聘笔试模拟试题及答案解析.docx
- 《第十章-中国文化的基本精神》-课件.ppt VIP
- 基于模糊控制的智能浇灌系统设计.pptx VIP
- 乳腺癌诊治指南与规范(2025年版精要本).PDF VIP
文档评论(0)