第四部分函数和作用域.ppt
《第四部分函数和作用域.ppt》由会员分享,可在线阅读,更多相关《第四部分函数和作用域.ppt(74页珍藏版)》请在三一文库上搜索。
1、第四章 函数和作用域,函数的定义和说明 函数的调用 函数的参数 内联函数 函数重载 函数的嵌套调用和递归调用 作用域 C+的系统函数,4.1 函数的定义和说明,一、函数的定义, () ,函数返回值的 类型,4.1 函数的定义和说明,一、函数的定义, () ,函数的标识,4.1 函数的定义和说明,一、函数的定义,包括参数名和参数类型(无形参时,括号不可省), () ,函数调用时的 形式参数,4.1 函数的定义和说明,一、函数的定义, () ,函数的具体实现,例:,int add( int x, int y ) int z; z=x+y; return z; ,void nothing( ) ,二
2、、函数的说明(声明),函数定义在后、调用在先,调用前必须说明; 函数定义在先、调用在后,可以不加说明; 复杂调用中,常在程序头对所有被调用函数 一次性说明。,原型说明,例4.2,#include void fun1( ), fun2( ), fun3( ); void main( ) cout“It is in main.”endl; fun2( ); cout“It is back in main.”endl; void fun1( ) cout“It is in fun1.”endl; fun3( ); cout“It is back in fun1.”endl; void fun2( )
3、 cout“It is in fun2.”endl; fun1( ); cout“It is back in fun2.”endl; void fun3( ) cout“It is in fun3.”endl; ,4.2 函数的调用,(),void main( ) int a=3; int b=5; int c=add(a,b); /实参与形参个数相等,类型相同 ,实参,函数调用表达式的值是函数的返回值; 函数调用表达式的类型是函数的类型;,函数调用通过一个表达式实现:,return ; 或 return;,函数的返回值通过返回语句实现,的值作为函数的返回值; 的类型自动转换为函数类型; 程序
4、执行的控制权转向调用函数;,注:无返回值的函数用“void”说明类型!,一、函数的传值调用,1. 传值调用,将实参值拷贝一个副本给对应的形参; 形参值的改变不影响实参!,变量的两种值:变量本身值和变量地址值; 传值调用分为:传值调用和传址调用;,例4.3 #include void swap1(int x, int y) int temp; temp=x; x=y; y=temp; /形参值交换 cout“x=”x“y=”yendl; void main( ) int a(5), b(9); swap1(a, b); cout“a=”a“b=”bendl; ,a=5, b=9,x=9, y=5
5、,将实参的地址值赋给对应的形参指针,使形参指针指向实参; 通过改变形参所指向的变量值来影响实参!,2. 传址调用,一、函数的传值调用,1. 传值调用,例4.4 #include void swap2(int *x, int *y) int temp; temp=*x; *x=*y; *y=temp; /形参指针所指向的变量值交换 cout“x=”*x“y=”*yendl; void main( ) int a(5), b(9); swap2( ,a=9, b=5,x=9, y=5,二、函数的引用调用 /C+特色,将实参变量名赋给对应的形参引用,相当于在被调用函数中使用了实参的别名; 通过改变引
6、用来直接改变对应的实参值; 引用调用比传址调用更直接。,引用是变量的别名 对引用的操作就是对被引用的变量的操作,例4.5 #include void swap3(int ,a=9, b=5,x=9, y=5,形参:引用,实参:变量,4.3 函数的参数,一、函数参数的求值顺序,C+没有规定函数调用时实参的求值顺序,各编译器自行规定; 当实参表达式中带有副作用的运算符时,可能产生由于求值顺序不同而造成的二义性;,例4.6 #include int add(int x, int y) return x+y; void main( ) int x(4), y(6); int z=add(+x, x+y
7、); coutzendl; ,二、设置函数参数的默认值,C+允许在函数说明或定义时为形参指定默认值; 按从右至左的顺序设置参数的默认值; 函数调用,实参与形参结合时:,若实参数目不足,则使用形参默认值; 若给定实参值,则使用给定的实参值。,例4.7 #include void fun(int a=1, int b=3, int c=5) cout“a=“a“,“b=“b“,“c=“cendl; void main( ) fun( ); fun(7); fun(7, 9); fun(7, 9, 11); ,a=1, b=3, c=5,a=7, b=3, c=5,a=7, b=9, c=5,a=7
8、, b=9, c=11,函数定义,例4.8 #include int m(8); int add_int(int x, int y=7, int z=m); void main( ) int a(5), b(15), c(20); int s=add_int(a, b); coutsendl; int add_int(int x, int y, int z) return x+y+z; ,函数声明,函数定义,28,按自右至左的顺序设置参数的默认值; 默认参数在函数声明中提供; 既有函数声明又有函数定义时,定义中不允许默认参数; 例4.8 如果只有函数定义,默认参数才可以出现在函数定义中。 例4
9、.7,设置参数默认值应注意的问题:,三、使用数组作函数参数 1. 形参和实参都用数组,49,实参,形参,2. 形参和实参都用指针,49,实参,3. 实参用数组名形参用引用,49,实参,4.4 内联函数,一、内联函数的引入,引入内联函数是为了解决函数调用时的效率问题; 编译时,用内联函数的函数体替换内联函数的调用表达式(一般函数在运行时被调用); 内联函数是以目标代码的增加为代价来换取时间的节省。,二、内联函数的定义,inline () ,#include inline int power(int x) return (x)*(x); void main( ) for(int i=1; i=10
10、; i+) int p=power(i); couti“*”i“=”pendl; ,例4.12,内联函数的定义必须出现在内联函数第一次被调用前; 内联函数体内不允许用循环语句和开关语句; 类结构中所有在类说明内部定义的函数都是内联函数。,使用内联函数时应注意:,4.5 函数重载,函数重载是指同一函数名对应多个函数实现; 函数重载时,要求同名函数在参数个数上不同,或参数类型上不同; 函数调用时,系统根据调用函数的实参情况选择某个函数实现。,一、参数类型不同的函数重载,#include int add(int, int); double add(double, double); void main
11、( ) coutadd(5, 10)endl; coutadd(5.0, 10.5)endl; int add(int x, int y) return x+y; double add(double a, double b) return a+b; ,例4.13,二、参数个数不同的函数重载,#include int min(int a, int b) return ab? a:b; int min(int a, int b, int c) int t=min(a, b); return min(t, c); void main( ) coutmin(5, 4, 9)endl; coutmin(
12、-2, 0)endl; ,例4.14,4.6 函数的嵌套和递归调用,一、函数的嵌套调用,在调用一个函数的过程中,又调用另一个函数,例4.15,二、函数的递归调用,调用一个函数的过程中又直接或间接地调用该函数自身;,1. 含义,2. 特点,每次分解出的新问题是原问题的简化的子问题; 最终分解出的新问题是一个已知解; 程序简洁清晰,可读性强;,3. 过程,回归:从已知条件出发,逐一求值回归, 最终达递推开始处;,递推:原问题不断分解为新的子问题, 最终达递归结束条件(已知);,例4.16,#include long int fac(int n); void main( ) int n; coutn
13、; long fa=fac(n); coutn“!=“faendl; long int fac(int n) long int p; if(n=0) p=1; else p=n*fac(n-1); return p; ,例4.17,#include const int N=8; long fibo(int n); void main( ) long f=fibo(N); coutfendl; long fibo(int n) if(n=1) return 0; else if(n=2) return 1; else return fibo(n-1)+fibo(n-2); ,4.7 作用域,一、
14、标识符的作用域规则,标识符只能在其说明或定义的范围内可见,在该范围之外不可见! “可见”即可以进行存取或访问; 标识符的说明和定义不完全一样; 定义一个标识符总是在一定范围内定义的,作用范围有大有小 ;,二、作用域的种类,1. 程序级(项目级最大),作用域:组成程序的所有文件; 包括:外部变量和外部函数;,2. 文件级,作用域:定义该标识符的文件内; 包括:外部静态类变量和内部函数;,3. 函数级,作用域:定义该标识符的函数体内; 包括:函数形参、函数内的自动类变量、内部静态类变量、语句标号;,4. 块级(最小),定义在分程序中、if语句、switch语句中以及循环体中的自动类变量和内部静态类
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 部分 函数 作用
链接地址:https://www.31doc.com/p-2585660.html