C程序设计第一章(二).ppt_第1页
C程序设计第一章(二).ppt_第2页
C程序设计第一章(二).ppt_第3页
C程序设计第一章(二).ppt_第4页
C程序设计第一章(二).ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章认识C+的对象 1 1.2.3 动态分配内存 到目前为止,程序中我们只用了声明变量、数组到目前为止,程序中我们只用了声明变量、数组 和其他对象(和其他对象(objectsobjects)所必需的内存空间,这些内所必需的内存空间,这些内 存空间的大小都在程序执行之前就已经确定了。但如果存空间的大小都在程序执行之前就已经确定了。但如果 我们需要内存大小为一个变量,其数值只有在程序运行我们需要内存大小为一个变量,其数值只有在程序运行 时时 ( (runtime)runtime)才能确定,例如有些情况下我们需要根才能确定,例如有些情况下我们需要根 据用户输入来决定必需的内存空间,那么我们该怎么办据用户输入来决定必需的内存空间,那么我们该怎么办 呢?呢? 答案是动态内存分配(答案是动态内存分配(dynamic memorydynamic memory) 为此为此C+ C+ 集成了操作符集成了操作符new new 和和deletedelete。 2 1.2.3 动态分配内存 new 动态分配内存 一般格式: 指针变量 = new 类型 size; new 运算符得到新分配空间的首地址,赋值 给指针变量后,可根据指针变量的加减运算来使 用这些空间。 delete 释放内存 使用完毕后要释放内存 delete p; 3 操作符new的存在是为了要求动态内存。new 后 面跟一个数据类型,并跟一对可选的方括号 里 面为要求的元素数。它返回一个指向内存块开始位 置的指针。其形式为: p = new 类型名; /用来给一个单元素的数据类型分配内存。 p = new 类型名 SIZE; /用来给一个数组分配内存。 P+3P+3 p p P+1P+1 操作符 new 和 new 4 给一个数组分配内存 int a10, *p=a , i; for (i=0; i k; /k=10 p = new intk; for (int i=0; i *(p+i) ; for (i=0; i using namespace std; struct Point int x,y; ; int main ( ) /主程序 Point *p; p = new Point ; coutp-xp-y ; coutxy ; delete p; return 0; #include struct Point int x,y; ; int main ( ) /*主程序*/ Point a, *p; p = printf (“ Input two interger:”); scanf(“%d%d”, printf(“%d%d”, a.x, a.y); return 0; 7 删除操作符 delete 既然动态分配的内存只在程序运行的某一 具体阶段才有用,那么它不再被需要时就应 该被释放,以便给后面的内存申请使用。操 作符delete 因此而产生,它的形式是: delete pointer; delete pointer; 第一种表达形式用来删除给单个元素分 配的内存,第二种表达形式用来删除多元素 (数组)的内存分配。在多数编译器中两种 表达式等价,使用没有区别, 8 1.2.4 引用的使用方法 C+中新的表示形式。 引用即使用变量的别名。 定义形式:数据类型 int /表示a是变量x的别名 。 注意:一旦定义别名后则a和x完全等价。 9 1.2.4 引用的使用方法 C+中新的表示形式。 引用即使用变量的别名。 定义形式:数据类型 int int 对别名的改动则是对正名的改动。 引用不占有存储空间,别名和对象( 正名)占有相同存储空间 11 引用作为函数参数-地址传递 不能直接声明对数组的引用 不能声明对引用的引用 int () 可以声明对指针的引用。 int x, *p2= int * int * p1= int x=56; int int *p= int *p= 12 引用实例: #include using namespace std; void main ( ) int x=56; int int cout using namespace std; typedef int array10; void main ( ) array a=1,2,3,4,5,6,7,8,9,10; array b9=0; cout using namespace std; void main ( ) const int y = 58; const int *p = int x=45,z(0); const int *p1= z = *p1 + *p; cout using namespace std; void main ( ) int y=58, x=66; int * const p= cout 24 1.2.6 泛型算法应用于普通数组(识记) 假定a,b是两个数组名,其长度为len 操作示例: 1.reverse( a, a+len) 将数组a中的元素顺序反转。(逆向) 2.copy( a, a+len, b ) 将a数组的内容原样复制给b数组 reverse_copy (a, a+len, b) 将a数组的内容反转后复制给b数组 25 1.2.6 泛型算法应用于普通数组(识记) 假定a,b是两个数组名,其长度为len 操作示例:reverse_copy (a,a+len,b) 3.sort(a,a+len) 将数组a中的元素按升序排序 4.sort(a,a+len,greater() 将数组a中的元素按降序排序 26 1.2.6 泛型算法应用于普通数组(识记) 5.find(a,a+len,value) 在数组a中查找值为value的元素,并返回位 置指针 假定a,b是两个数组名,其长度为len 操作示例: find(a,a+len,4) 27 1.2.6 泛型算法应用于普通数组(识记) 6,输出数组中的内容 Copy(a,a+len,Ostream_iterator (cout,”字符串”)) Ostream_iterator表示输出流操作符 :表示要输出的数组类型 Cout表示流输出操作 “字符串”:表示分隔字符串 28 例 1-6 数组升幂排序 、复制、输出 #include #include using namespace std; void main ( ) double a =1.1, 4.4, 3.3, 2.2, b4; copy(a,a+4,ostream_iterator(cout,“ “); reverse_copy(a,a+4,ostream_iterator(co ut,“ “); copy(a,a+4,b); copy(b,b+4,ostream_iterator(cout,“, “); sort(a,a+4); copy(a,a+4,ostream_iterator(cout,“ “); reverse_copy(a,a+4,b); copy(b,b+4,ostream_iterator(cout,“, “); 29 例 1-6 数组升幂排序 、复制、输出 /p27-4 #include #include #include using namespace std; void main ( ) int a =1, 2, 3, 4,5,6,7,8, b8; cout(cout,“ “); copy(b,b+8,ostream_iterator(cout,“, “); 30 1.2.7 数据的简单输入输出格式 输入输出格式控制有两种方法: 1 操作符函数 2 IOSBASE接口 31 例 1.10 #include #include using namespace std; void main ( ) int a=29,b=1001; cout #include using namespace std; const double PI 3.1415926 void main ( ) cout PIendl; cout setprecision(0)PIendl; cout setprecision(3)PIendl; cout setprecisio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论