C语言的内存分配详解.pptVIP

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言的内存分配详解ppt课件

动态内存分配 堆内存分配 堆内存的分配与释放 下面是关于new 操作的说明 1、new运算符返回的是一个指向所分配类型变量(对象)的指针。对所创建的变量或对象,都是通过该指针来间接操作的,而动态创建的对象本身没有名字。 2、一般定义变量和对象时要用标识符命名,称命名对象,而动态的称无名对象(请注意与栈区中的临时对象的区别,两者完全不同:生命期不同,操作方法不同,临时变量对程序员是透明的)。 3、堆区是不会在分配时做自动初始化的(包括清零),所以必须用初始化式(initializer)来显式初始化。new表达式的操作序列如下:从堆区分配对象,然后用括号中的值初始化该对象。 动态数组举例 (1) (本小题10分)读懂如下程序: #include iostream.h #include math.h double TriangleArea( ) { int i; double dTArea; 7 double* pds = new double[5]; 8 if (!pds) 9 { cout Error memory allocation!endl; 10 return -1; 11 } pds[0]=0; for(i=1;i4;i++) { cout the side is:; cin pds[i]; pds[0]+=pds[i]/2; } pds[4]= pds[0]; for(i=1;i4;i++) pds[0] *= ( pds[4] - pds[i]); dTArea=sqrt(pds[0]); 23 delete []pds; return dTArea; } 指针数组和数组指针 指针类型: (1)int*ptr;//指针所指向的类型是int (2)char*ptr;//指针所指向的的类型是char (3)int**ptr;//指针所指向的的类型是int* (也就是一个int * 型指针) (4)int(*ptr)[3];//指针所指向的的类型是int()[3] //二维指针的声明 指针数组 一个数组里存放的都是同一个类型的指针,通常我们把他叫做指针数组。 比如 int * a[2];它里边放了2个int * 型变量 . int * a[2]; a[0]= new int[3]; a[1]=new int[3]; delete a[0]; delete a[1]; 注意这里 是一个数组,不能delete [] ; 数组指针 一个指向一维或者多维数组的指针. int * b=new int[10]; 指向一维数组的指针b ; 注意,这个时候释放空间一定要delete [] ,否则会造成内存泄露, b 就成为了空悬指针 int (*b2)[10]=new int[10][10]; 注意,这里的b2指向了一个二维int型数组的首地址. 注意:在这里,b2等效于二维数组名,但没有指出其边界,即最高维的元素数量,但是它的最低维数的元素数量必须要指定!就像指向字符的指针,即等效一个字符串,不要把指向字符的指针说成指向字符串的指针。 int(*b3) [30] [20]; ?//三级指针――指向三维数组的指针; int (*b2) [20]; ? ? //二级指针;――指向二维数组的指针; b3=new int [1] [20] [30]; b2=new int [30] [20]; 删除这两个动态数组可用下式: delete [] b3; ?//删除(释放)三维数组; delete [] b2; ?//删除(释放)二维数组; 7.1.2 堆对象与构造函数 正因为构造函数可以有参数,所以new后面类(class)类型也可以有参数。这些参数即构造函数的参数。 但对创建数组,则无参数,并只调用缺省的构造函数。见下例类说明: 7.1.3 浅拷贝与深拷贝 缺省拷贝构造函数:用一个对象的内容初始化另一个同类对象,也称为缺省的按成员拷贝,不是对整个类对象的按位拷贝。这种拷贝称为浅拷贝。 class CGoods{ char *Name; //不同与char Name[21] ? int Amount; float Price; float Total_value; public: CGoods(){Name=new char[21];} CGoods(CGoods other){ //缺省拷贝构造内容:

文档评论(0)

118zhuanqian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档