




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针第四讲 C+语言基础5.4 函数5.5 数组与指针第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针引用(reference): C+的特点什么是引用: 引用是一个别名, 是某一个目标对象的替代名. 对所有加于引用上的操作实际上就是加于引用的目标对象之上.例如: int x; /定义了变量 x int &rx = x; /定义了x的一个引用
2、问题: 1. 为什么要用引用? 2. 引用与指针的区别? 3. 引用的功能是什么? 4. 在引用的使用中要注意什么?第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针传值调用和引用调用例2: 希望通过传值调用交换变量值#include void Swap(int, int); /声明函数void main( ) int x=4, y=8; /定义变量 cout n Before Swap x= x , y= y endl; Swap(x, y); /调用函数 cout n After Swap
3、x= x , y= y endl; void Swap(int a, int b) int t=a; a=b; b=t; 结果: Before Swap x=4, y=8 After Swap x=4, y=8为什么?传值调用.第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针例: 通过指针调用交换变量值#include void Swap(int*, int*); /声明函数void main( ) int x=4, y=8; /定义变量 cout n Before Swap x= x , y
4、= y endl; Swap(&x, &y); /通过指针调用函数 cout n After Swap x= x , y= y endl; void Swap(int *a, int *b) int t; t=*a; *a=*b; *b=t; 结果: Before Swap x=4, y=8 After Swap x=8, y=4为什么?指针调用.第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针例: 通过引用调用交换变量值#include void Swap(int&,
5、 int&); /声明函数void main( ) int x=4, y=8; /定义变量 cout n Before Swap x= x , y= y endl; Swap(x, y); /调用函数 cout n After Swap x= x , y= y endl; void Swap(int &a, int &b) int t=a; a=b; b=t; 结果: Before Swap x=4, y=8 After Swap x=8, y=4为什么?引用调用.第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句
6、5.4 函数函数5.5 数组与指针数组与指针引用与指针关系的分析void Swap(int &a, int &b) /引用调用 int t=a; a=b; b=t; void Swap(int *a, int *b) /指针调用 int t; t=*a; *a=*b; *b=t; void Swap(int a, int b) /传值调用 int t=a; a=b; b=t; 区别: 1. 引用是某一对象的别名, 指针是 某一变量的地址变量. 2. 引用在定义时就必须初始化, 即 为一已定义的对象的别名, 不可 以重新赋值. 指针可在使用时初 始化, 且可以重新赋值. 第五章第
7、五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针引用的作用: 1. 引用可以象地址一样完成对所代表的对象的操作. 2. 对引用的操作不同与对指针的操作, 它可直接作用于变量, 所以更方便, 更易于理解.引用的缺点: 引用不能为空, 即必须代表某一象,且不能重新赋值. 指针灵活性较好, 但使用较不方便.第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针函数名重载: C+的特点问题: 设计一个函数完成两个数
8、相加.分析: 用C语言, 就必须设计两不同名函数: int Iadd(int a, int b); float Fadd(float a, float b); 它们分别完成对整型和实型数的加法. 若用C+, 就可以两个同名的函数: int add(int a, int b); float add(float a, float b); 它们分别完成对整型和实型数的加法.作用: 由于函数名相同, 在函数调用时不必 考虑实参数的类型, 使编程更便利. 第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针
9、什么是函数重载: 对同一函数进行多次定义 例: #include int fname(int p) /定义函数 cout one ; return p*p; char fname(char p) /定义函数 cout two ; return p+4; void main( ) cout fname(4) endl; / cout fname(a) endl; /结果: one 16 two d第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针递归函数什么是递归 一个函数直接或间接地 调用自己何
10、时用递归 问题可被简化, 边界有界如 Fibonacci数列,我们有:fibo(0)=1 fibo(1)=1fibo(n)=fibo(n-1)+fibo(n-2) 有边界 有边界 可简化为何用递归 使难以实现的编程简单化第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针例: 用递归函数求Fibonacci数列#includeunsigned long fibo(unsigned long); /声明函数void main( ) unsigned long result, temp; cout t
11、emp; result = fibo(temp); /调用函数 cout Fibonacci( temp )= result endl; unsigned long fibo(unsigned long n) /定义函数 if( n = = 0 | n = = 1) return n; /边界条件 else return fibo(n-1) + fibo(n-2); /递归调用结果: Enter an integer: 3 Fibonacci(3) = 3第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针
12、数组与指针递归执行流程fibo(3)return fibo(2)+fibo(1)return fibo(1)+fibo(0)return 1return 1return 1第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针内嵌函数为什么要内嵌函数 程序中对函数的调用过于频繁,导致程序执行时间加长。内嵌函数的使用可提高程序执行效率。内嵌函数的定义 在函数声明时加inline例如:inline void swap(int&, int&);内嵌函数作用机理 把内嵌函数的代码直接嵌人函数
13、调用处,而不是转到调用函数的代码处。这样减少了调用转换的开销。内嵌函数的缺点 程序执行效率提高了,但可执行程序规模变大了。实际应用中要权衡效率和规模之间的关系。第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针例:内嵌函数的定义使用#include inline int max(int a, int b); if( ab) return a; else return b; void main( ) int x, y; cout x y; cout max= max(x,y) endl; 结果:
14、Enter two integers: 10 28 max= 28第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针数组(array)与指针(pointer)什么是数组 保存相同类型数据的内 存单元集合数组的定义 类型名 数组名大小; type ArrayNamesize;例如: int a5; 定义了一个整数型数组,数组名为 a,数组的大小为5,即有5个元素:a0, a1, a2, a3, a4.Float b23; 定义了一个二维数组, 6个元素:b00, b01, b02, b10, b1
15、1, b12.第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针数组使用注意点 1. 数组的第一个元素下标是0, 而不是1, 如: a0, b00,等2. 数组的最后一个元素的下标是数组的大 小减去1, 如: int a8; 的最后一个 元素为 a7.3. 二维数组的定义和使用其下标都是用 隔开, 而不是用逗号隔开, 如: int b23; 定义了一个二维数组, 而不 能定义成: int b2,3; b12 表示数组的第2行、第3列元素, 而不能用 b1,2 来表示.第五章第五章 C+基础基础5
16、.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针数组的初始化数组可以在定义时初始化,并可以用初始化来确定数组的元素个数。例如:int b =2, 4, 9, 15; 等价于 int b4=2, 4, 9, 25;int c 2=2,4,5,9,11,19; 等价于int c32=2,4,5,9,11,19;注意:二维数组初始化时,第二个下标不能省,int c=2,4,5,9,11,19是错的。在上例中,我们有:c00=2, c01=4, c10=5, c11=9, c20=11, c21=19.第五章第五章 C+基础基础
17、5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针例:对数组中的元素按升序排列#includeint a5=23,42,36,19; /初始化数组void sort( ); /声明函数void main( ) sort ( ); /调用函数 for(int i=0; i5; i+) cout a i = ai , ;void sort( ) /定义函数 for (int i=0; i4; i+) for(int j=i+1;jaj) int t=ai; ai=aj; aj=t;结果: a0=0, a1=19, a2=23
18、, a3=36, a4=42 第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针char 型数组字符型数组可定义为:char c =H,i, ,w,o,r,l,d,0;数组 c 包含了字符串 Hi world, 0表示结束。可等价定义为:char c =Hi world;数组的长度为9个字节,其中 “Hi” 占2个字节,“world”占 5个字节,空格和结束标志 “0”各1个字节。第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函
19、数函数5.5 数组与指针数组与指针例: 数组的读入#includevoid main( ) char buffer80; cout buffer; cout Here is the buffer: buffer;结果:Enter a string: Hi world Here is the buffer: Hi程序有两个问题:1. 若用户输入一个多于79个字符的串, buffer 不够写.2. 如果输入了空格, 将被认为是串的结束.第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针例: 数组的读
20、入(修改后)#includevoid main( ) char buffer80; cout Enter a string: ; cin.get(buffer, 79); /调用cin中的方法get cout Here is the buffer: buffer;结果:Enter a string: Hi world Here is the buffer: Hi world第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针 指 针 什么是指针 保存内存地址的变量指针的声明 type *Pname
21、例如: int *pi; float *pf;指针的运算 “*” 是目标访问运算符,用来读取它所指 向的内存中的值.“&” 是取址运算符,用来获取某一变量的 地址. int *pi, a=10; pi=&a; cout *pi;第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针例: 指针的应用#include void main( ) int Age=18; int *PAge=0; /定义空指针PAge PAge = &Age; /将Age的地址赋给PAge cout
22、My age: Age , *Page endl; *PAge=22; /给PAge指向的内存赋值22 cout My age: Age , *Page endl; 结果: My age: 18, 18 My age: 22, 22第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针 指针应用注意点 1. 指针使用前必须初始化. 要培养良好的 编程风格, 对指针进行初始化. 不知赋何 值可先赋0.如: int b,a=9; int *pi; pi = &a; b=*pi; int b,a=
23、9; int *pi=0; 没有初始化的指针对程序的危害很大2. 注意指针与引用的区别, 运算符 &的不 同含义.第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针例: 运算符&的不同含义#includevoid main( ) int a; /定义整型变量 a int &ra=a; /定义 a 的引用 a=5; cout a= a , ra= ra endl; /输出值 cout &a= &a , &ra= &ra endl; /输出地址
24、结果: a=5, ra=5 &a=0 x3500, &ra=0 x3500第五章第五章 C+基础基础5.1 C+概述概述5.2 数据和表达式数据和表达式5.3 3 基本语句基本语句5.4 函数函数5.5 数组与指针数组与指针动态内存分配new和回收deletenew 类似于C语言中的 malloc( ), new返回的是内存地址, 可赋给一个指针, 如:int *pi; /定义一个指针变量pi=new int; /分配内存地址给 piint *pp, a=9;pp=&a; /同样给pp分配了地址注意: 如果无内存分配, 则返回空指针NULL, 所以应检查有无内存分配.第五章第五章 C+基础
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 串货合同范例写
- 临时紧急抢修合同样本
- 个人住宅长期租用合同范例
- 公司食堂承包合同范例
- 供货类合同范例
- 农业承揽合同范例
- 主合同担保合同范例
- 借用公司资质合同范例
- app 使用合同范例
- 公路合同标准文本版
- 2024年福建省公务员录用考试《行测》真题及答案解析
- 慢阻肺康复治疗病例汇报
- 氢氧化钠购销
- 医疗器械供应商合作管理制度
- 2024年中级电工考前必刷必练题库500题(含真题、必会题)
- DB11-T 1832.7-2022 建筑工程施工工艺规程 第7部分:建筑地面工程
- 湖北省武汉市腾云联盟2023-2024学年高二下学期5月联考化学试卷
- 《PLC应用技术(西门子S7-1200)第二版》全套教学课件
- 2024年《武器装备科研生产单位保密资格标准》内容考试试题库及答案
- 变革管理方案计划
- 异地就医登记备案表
评论
0/150
提交评论