第四部分函数和作用域

上传人:博****1 文档编号:586486751 上传时间:2024-09-04 格式:PPT 页数:74 大小:245.53KB
返回 下载 相关 举报
第四部分函数和作用域_第1页
第1页 / 共74页
第四部分函数和作用域_第2页
第2页 / 共74页
第四部分函数和作用域_第3页
第3页 / 共74页
第四部分函数和作用域_第4页
第4页 / 共74页
第四部分函数和作用域_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《第四部分函数和作用域》由会员分享,可在线阅读,更多相关《第四部分函数和作用域(74页珍藏版)》请在金锄头文库上搜索。

1、第四章第四章 函数和作用域函数和作用域函数的定义和说明函数的定义和说明函数的调用函数的调用函数的参数函数的参数内联函数内联函数函数重载函数重载函数的嵌套调用和递归调用函数的嵌套调用和递归调用作用域作用域C+C+的系统函数的系统函数4.1 函数的定义和说明函数的定义和说明一、函数的定义一、函数的定义 () 函数返回值的函数返回值的类型类型4.1 函数的定义和说明函数的定义和说明一、函数的定义一、函数的定义 () 函数的标识函数的标识4.1 函数的定义和说明函数的定义和说明一、函数的定义一、函数的定义包括参数名和参数类型(无形参时,括号不可省)包括参数名和参数类型(无形参时,括号不可省) () 函

2、数调用时的函数调用时的形式参数形式参数4.1 函数的定义和说明函数的定义和说明一、函数的定义一、函数的定义 () 函数的具体实现函数的具体实现例:例: int add( int x, int y ) int z; z=x+y; return z; void nothing( ) 二、函数的说明(声明)二、函数的说明(声明) 函数定义在后、调用在先,调用前必须说明;函数定义在后、调用在先,调用前必须说明; 函数定义在先、调用在后,可以不加说明;函数定义在先、调用在后,可以不加说明; 复杂调用中,常在程序头对所有被调用函数复杂调用中,常在程序头对所有被调用函数 一次性说明。一次性说明。 () ;例

3、:例:int add(int x, int y);原型说明原型说明例例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( ) cout“It is in fun2.”endl; fun1( ); cout“It is bac

4、k 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); /实参与形参个数相等,类型相同实参与形参个数相等,类型相同实参实参函数调用表达式的值是函数调用表达式的值是函数的返回值函数的返回值;函数调用表达式的类型是函数调用表达式的类型是函数的类型函数的类型;v 函数调用通过一个表达式实现:函数调用通过一个表达式实现: return ; 或或 return;v 函数的返回值通过函数的返回值通过返回语句返回语句实现实现1)

5、的值作为函数的返回值;的值作为函数的返回值;2)的类型自动转换为函数类型;的类型自动转换为函数类型;3)程序执行的控制权转向调用函数;程序执行的控制权转向调用函数;注:无返回值的函数用注:无返回值的函数用“void”说明类型!说明类型!一、函数的传值调用一、函数的传值调用1. 传值调用传值调用将实参值拷贝一个副本给对应的形参将实参值拷贝一个副本给对应的形参;形参值的改变不影响实参!形参值的改变不影响实参!实参实参:常量、变量值或表达式值:常量、变量值或表达式值形参形参:变量:变量变量的两种值:变量的两种值:变量本身值变量本身值和和变量地址值变量地址值;传值调用分为:传值调用分为:传值调用传值调

6、用和和传址调用传址调用;例例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=9x=9, y=5将将实参的地址值赋给对应的形参指针,使形实参的地址值赋给对应的形参指针,使形参指针指向实参;参指针指向实参;通过改变形参所指向的变量值来影响实参!通过改变形参所指向的变量值来影响实参!实参实参:地址值(指针):地址

7、值(指针)形参形参:指针:指针 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, &b); cout“a=”a“b=”bendl; a=9, b=5x=9, y=5二、函数的二、函数的引用调用引用调用 /C+特色特色将实参变量名赋给对应

8、的形参引用,相当于将实参变量名赋给对应的形参引用,相当于在被调用函数中使用了实参的别名在被调用函数中使用了实参的别名;通过改变引用来通过改变引用来直接直接改变对应的实参值改变对应的实参值;引用调用比传址调用更直接。引用调用比传址调用更直接。形参形参:引用引用实参实参:变量名变量名q引用是引用是变量的别名变量的别名q对引用的操作就是对被引用的变量的操作对引用的操作就是对被引用的变量的操作例例4.5 #include void swap3(int &x, int &y) int temp; temp=x; x=y; y=temp; /形参引用值交换形参引用值交换 cout“x=”x“y=”yend

9、l; void main( ) int a(5), b(9); swap3(a, b); cout“a=”a“b=”bendl; a=9, b=5x=9, y=5形参形参:引用引用实参实参:变量变量4.3 函数的参数函数的参数一、函数参数的求值顺序一、函数参数的求值顺序C+没有规定函数调用时实参的求值顺序,没有规定函数调用时实参的求值顺序,各编译器自行规定;各编译器自行规定;当实参表达式中带有副作用的运算符时,当实参表达式中带有副作用的运算符时,可能产生由于求值顺序不同而造成的二义可能产生由于求值顺序不同而造成的二义性;性; 例例4.6 #include int add(int x, int

10、y) return x+y; void main( ) int x(4), y(6); int z=add(+x, x+y); coutzendl; int t=+x; int z=add(t, x+y);二、设置函数参数的默认值二、设置函数参数的默认值1.C+允许在允许在函数说明函数说明或或定义定义时为形参指定时为形参指定默认值;默认值;2.按按从右至左的顺序从右至左的顺序设置参数的默认值;设置参数的默认值;3.函数调用,实参与形参结合时函数调用,实参与形参结合时:a)若实参数目不足若实参数目不足,则使用形参默认值则使用形参默认值;b)若给定实参值,则使用给定的实参值。若给定实参值,则使用给

11、定的实参值。例例4.7 #include void fun(int a=1, int b=3, int c=5) couta=a,b=b,c=cendl; void main( ) fun( ); fun(7); fun(7, 9); fun(7, 9, 11);a=1, b=3, c=5a=7, b=3, c=5a=7, b=9, c=5a=7, 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); in

12、t s=add_int(a, b); coutsendl; int add_int(int x, int y, int z) return x+y+z; 函数声明函数声明函数定义函数定义281)按按自右至左的顺序自右至左的顺序设置参数的默认值;设置参数的默认值;2)默认参数默认参数在函数声明中提供在函数声明中提供;3)既有函数声明又有函数定义时,定义既有函数声明又有函数定义时,定义中不允许默认参数;中不允许默认参数; 例例4.84)如果只有函数定义,默认参数才可以如果只有函数定义,默认参数才可以出现在函数定义中。出现在函数定义中。 例例4.7v 设置参数默认值应注意的问题:设置参数默认值应注意

13、的问题: 三、使用数组作函数参数三、使用数组作函数参数 1. 形参和实参都用数组形参和实参都用数组 #includeint a8=1, 3, 5, 7, 9, 11, 13;void fun(int b , int n) for( int i=0; in- -1; i+ ) b7+=bi; void main( ) int m=8; fun(a, m); couta7endl;例例4.949实参实参形参形参 2. 形参和实参都用指针形参和实参都用指针#includeint a8=1, 3, 5, 7, 9, 11, 13;void fun(int *pa, int n) /指针指针pa指向实参

14、数组指向实参数组 for(int i=0; in-1; i+) *(pa+7)+=*(pa+i);void main() int m=8; fun(a, m); couta7endl;例例4.1049实参实参 3. 实参用数组名形参用引用实参用数组名形参用引用#includetypedef int array8;/ int a8=1, 3, 5, 7, 9, 11, 13;array a=1, 3, 5, 7, 9, 11, 13;void fun(array &b, int n) /为为实参数组起实参数组起别名别名b for(int i=0; in-1; i+) b7+=bi; /对对b操作

15、即对实参数组操作操作即对实参数组操作void main( ) int m=8; fun(a, m); couta7endl;例例4.1149实参实参4.4 内联函数内联函数一、内联函数的引入一、内联函数的引入1.引入内联函数是为了解决函数调用时的引入内联函数是为了解决函数调用时的效率问题;效率问题;2.编译时,编译时,用内联函数的函数体用内联函数的函数体替换替换内联内联函数的调用表达式函数的调用表达式(一般函数在运行时(一般函数在运行时被调用);被调用);3.内联函数是以目标代码的增加为代价来内联函数是以目标代码的增加为代价来换取时间的节省。换取时间的节省。二、内联函数的定义二、内联函数的定义

16、 inline () #include inline int power(int x) return (x)*(x); void main( ) for(int i=1; i=10; i+) int p=power(i); couti“*”i“=”pendl; 例例4.121.内联函数的内联函数的定义定义必须必须出现在出现在内联函数内联函数第一次被调用第一次被调用前前;2.内联函数体内内联函数体内不允许不允许用用循环语句循环语句和和开开关语句关语句;3.类结构中所有在类说明内部定义的函类结构中所有在类说明内部定义的函数都是内联函数。数都是内联函数。v 使用内联函数时应注意:使用内联函数时应注意

17、:4.5 函数重载函数重载函数重载是指函数重载是指同一函数名同一函数名对应对应多个函数多个函数实现实现;函数重载时,要求同名函数在函数重载时,要求同名函数在参数个数参数个数上不同,上不同,或或参数类型上不同参数类型上不同;函数调用时,系统函数调用时,系统根据根据调用函数的调用函数的实参实参情况选择某个函数实现情况选择某个函数实现。一、参数类型不同的函数重载一、参数类型不同的函数重载 #include int add(int, int); double add(double, double); void main( ) coutadd(5, 10)endl; coutadd(5.0, 10.5)

18、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(- -2, 0)endl; 例例4.144.6 函数的嵌套和

19、递归调用函数的嵌套和递归调用一、函数的嵌套调用一、函数的嵌套调用 main函数函数调用调用a函数函数结束结束 b函数函数 a函数函数调用调用b函数函数q在调用一个函数的过程中,又调用另一个函数在调用一个函数的过程中,又调用另一个函数例例4.15#includeconst int k=4, n=6;int sum(int k,int n), powers(int m,int n);void main( ) coutsum(k, n)endl;int sum(int k, int n) /求求n个数的个数的k次幂之和次幂之和 for(int i=1,sum=0; i=n; i+) sum+=pow

20、ers(i,k); return sum;int powers(int i, int k) /求求i的的k次幂次幂 for(int j=1,p=1; j=k; j+) p*=i; return p;二、函数的递归调用二、函数的递归调用调用一个函数的过程中又调用一个函数的过程中又直接直接或或间接间接地地调调用该函数自身用该函数自身;1. 含义含义2. 特点特点1)每次分解出的每次分解出的新问题是原问题的简化新问题是原问题的简化的的子问题;子问题;2)最终分解出最终分解出的新问题是一个的新问题是一个已知解已知解;3)程序简洁清晰,可读性强;程序简洁清晰,可读性强;3. 过程过程q回归回归:从已知条

21、件出发,:从已知条件出发,逐一求值回归逐一求值回归, 最终达递推开始处;最终达递推开始处;q递推递推:原问题不断:原问题不断分解为新的子问题分解为新的子问题, 最终达递归结束条件最终达递归结束条件( (已知已知) );0!=1(已知已知)3!=3*2!2!=2*1!1!=1*0!递推递推递推递推递推递推1!=1*1=12!=2*1!=2*1=23!=3*2!=3*2=6回归回归回归回归回归回归例:例:例例4.16 #include long int fac(int n); void main( ) int n; coutn; long fa=fac(n); coutn!=faendl; lon

22、g 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 作用域作用域一、标识符的作用域规则一、标识符的作用域规则1.标识符只能标识符只

23、能在在其其说明或定义的范围内可见说明或定义的范围内可见,在该范围之外不可见!在该范围之外不可见!2.“可见可见”即可以进行即可以进行存取存取或或访问访问;3.标识符的标识符的说明和定义不完全一样说明和定义不完全一样;4.定义一个标识符总是在一定范围内定义的,定义一个标识符总是在一定范围内定义的,作用范围有大有小作用范围有大有小 ;二、作用域的种类二、作用域的种类1. 程序级程序级(项目级最大)(项目级最大)作用域:作用域:组成程序的所有文件组成程序的所有文件;包括:包括:外部变量外部变量和和外部函数外部函数;2. 文件级文件级作用域:作用域:定义该标识符的文件内定义该标识符的文件内;包括:包括

24、:外部静态类变量外部静态类变量和和内部函数内部函数;3. 函数级函数级作用域:作用域:定义该标识符的函数体内定义该标识符的函数体内;包括:包括:函数形参函数形参、函数内的自动类变量函数内的自动类变量、内部静态类变量内部静态类变量、语句标号语句标号;4. 块级块级(最小)(最小)定义在定义在分程序分程序中、中、if语句语句、switch语句语句中中以及以及循环体循环体中的中的自动类变量自动类变量和和内部静态内部静态类变量类变量。二、作用域的种类二、作用域的种类三、重新定义标识符作用域三、重新定义标识符作用域1. 在标识符作用域的某个子范围内可以重新在标识符作用域的某个子范围内可以重新定义该标识符

25、!定义该标识符! void fun( ) int a; /函数体内函数体内 float a; /分程序内分程序内 2. 原定义的标识符在子范围内不可见,原定义的标识符在子范围内不可见,但仍但仍存在(暂时被隐藏);存在(暂时被隐藏);#includevoid main( ) int a(5), b(7), c(10); couta b cendl; int b(8); float c(8.8); couta b cendl; a=b; int c=b; couta b cendl; couta b cendl; couta b cendl;5 7 105 8 8.88 8 88 8 8.88 7

26、 10例例4.18#include void main( ) int x(3); for(; x0; x-) int x(5); /重新定义变量重新定义变量x, 作用域作用域: 块级块级coutx ; coutendlxendl; 5 5 5 0例例4.19四、局部变量和全局变量四、局部变量和全局变量1. 局部变量局部变量1) 作用域:作用域:函数级函数级和和块级块级;2) 包括:包括:自动类变量自动类变量、内部静态变量内部静态变量和和函数形参函数形参;q自动类变量自动类变量 autoq寄存器类变量寄存器类变量registerv内部静态类变量内部静态类变量(static)定义在定义在函数体内函

27、数体内或分程序内,定义时或分程序内,定义时有默认值有默认值; ;生存期长生存期长, ,可见性可见性与与存在性不一致存在性不一致( (作用域外不可见作用域外不可见但仍存在,回到作用域仍保留原值但仍存在,回到作用域仍保留原值););例例4.20#include void other( );void main( ) int a(3); register int b(5); static int c; couta=a,b=b,c=cendl; other( ); other( );void other( ) int a(5); static int b(12); /内部静态类变量内部静态类变量 a+1

28、0; b+=20; couta=a,b=bendl; a=3, b=5, c=0 a=5, b=32 a=5, b=522. 全局变量全局变量1) 作用域:作用域:程序级程序级和和文件级文件级;2) 包括:包括:外部变量外部变量和和外部静态类变量外部静态类变量;v外部变量的定义外部变量的定义 定义在函数体外定义在函数体外,定义时不加任何存储类说明;,定义时不加任何存储类说明;v外部变量的说明(声明)外部变量的说明(声明)用用说明符说明符“extern”对外部变量进行说明对外部变量进行说明使用后定义的外部变量,在使用前必须说明;使用后定义的外部变量,在使用前必须说明;在一个文件中使用另一个文件定

29、义的外部变量,必须在一个文件中使用另一个文件定义的外部变量,必须说明;说明;一个外部变量只能定义一次,但可以说明多次。一个外部变量只能定义一次,但可以说明多次。int add(int a, int b) int s=a+b; return s; void main( ) extern int x, y; /外部变量说明外部变量说明 coutadd(x, y)endl; int x(20), y(5); /外部变量定义外部变量定义使用后定义的外部变量使用后定义的外部变量必须提前说明必须提前说明例:例:例例4.21#include void fun1( ), fun2( ), fun3( ); /

30、函数说明函数说明int i(5); /外部变量:程序级外部变量:程序级void main( ) i=20; fun1( ); coutmain():i=iendl; fun2( ); coutmain():i=iendl; fun3( ); coutmain():i=iendl;文件:文件:main.cpp#includestatic int i; /外部静态变量:文件级外部静态变量:文件级void fun1( ) i=50; coutfun1():i(static)=iendl;1)fun1():i(static)=50文件:文件:file1.cpp3) fun2():i(auto)=154

31、) fun2():i(extern)=20#includevoid fun2( ) int i=15; /自动类变量:函数级自动类变量:函数级 coutfun2():i(auto)=iendl; if(i) extern int i; /声明外部变量:程序级声明外部变量:程序级 coutfun2():i(extern)=iendl; extern int i; void fun3( ) i=30; coutfun3():i(extern)=iendl; if(i) int i=10; coutfun3():i(auto)=iendl; 文件:文件:file2.cpp例例4.21#include

32、 void fun1( ),fun2( ),fun3( );int i(5); /外部变量:程序级外部变量:程序级void main( ) i=20; fun1( ); coutmain():i=iendl; fun2( ); coutmain():i=iendl; fun3( ); coutmain():i=iendl; 2)main():i=20文件:文件:main.cpp例例4.21#include void fun1( ),fun2( ),fun3( );int i(5); /外部变量:程序级外部变量:程序级void main( ) i=20; fun1( ); coutmain():

33、i=iendl; fun2( ); coutmain():i=iendl; fun3( ); coutmain():i=iendl;文件:文件:main.cpp例例4.21#include void fun1( ),fun2( ),fun3( );int i(5); /外部变量:程序级外部变量:程序级void main( ) i=20; fun1( ); coutmain():i=iendl; fun2( ); coutmain():i=iendl; fun3( ); coutmain():i=iendl;5)main():i=20文件:文件:main.cpp例例4.21#include vo

34、id fun1( ),fun2( ),fun3( );int i(5); /外部变量:程序级外部变量:程序级void main( ) i=20; fun1( ); coutmain():i=iendl; fun2( ); coutmain():i=iendl; fun3( ); coutmain():i=iendl;文件:文件:main.cpp#includevoid fun2( ) int i=15; /自动类变量:函数级自动类变量:函数级 coutfun2():i(auto)=iendl; if(i) extern int i; /声明外部变量:程序级声明外部变量:程序级 coutfun2

35、():i(extern)=iendl; extern int i; /声明外部变量:程序级声明外部变量:程序级 void fun3( ) i=30; coutfun3():i(extern)=iendl; if(i) int i=10; /自动类变量:块级自动类变量:块级 coutfun3():i(auto)=iendl; 6) fun3():i(extern)=307) fun3():i(auto)=10文件:文件:file2.cpp例例4.21#include void fun1( ),fun2( ),fun3( );int i(5); /外部变量:程序级外部变量:程序级void main

36、( ) i=20; fun1( ); coutmain():i=iendl; fun2( ); coutmain():i=iendl; fun3( ); coutmain():i=iendl;8)main():i=30文件:文件:main.cpp例例4.21#include void fun1( ),fun2( ),fun3( );int i(5); /外部变量:程序级外部变量:程序级void main( ) i=20; fun1( ); coutmain():i=iendl; fun2( ); coutmain():i=iendl; fun3( ); coutmain():i=iendl;8

37、)main():i=30文件:文件:main.cpp五、内部函数和外部函数五、内部函数和外部函数1. 内部函数内部函数内部函数只在定义它的文件中可用!内部函数只在定义它的文件中可用! static () 2. 外部函数外部函数extern () 外部函数的作用域是整个程序!外部函数的作用域是整个程序!4.8 C+的系统函数的系统函数一、一、C+系统函数概述系统函数概述1.了解所用的了解所用的C+系统系统提供哪些系统函数提供哪些系统函数;2.知道某系统知道某系统函数的说明放在哪个头文件函数的说明放在哪个头文件中;中;3.调用一个函数时,要清楚其调用一个函数时,要清楚其功能功能、参数参数和和返回值

38、返回值。二、字符串处理函数二、字符串处理函数q调用字符串处理函数时,要包含头文件调用字符串处理函数时,要包含头文件string.h1. 字符串长度函数字符串长度函数strlen( ) int strlen(const char *s);返回字符一个字符串的长度,空字符不计在内返回字符一个字符串的长度,空字符不计在内2. 字符串拷贝函数字符串拷贝函数strcpy( ) char * strcpy(char *s1, char *s2); char * strncpy(char *s1, char *s2, int n);实现字符串的复制实现字符串的复制,返回返回s1的地址的地址3. 字符串连接函

39、数字符串连接函数strcat( ) char * strcat(char *s1, char *s2); char * strncat(char *s1, char *s2, int n);4. 字符串比较函数字符串比较函数strcmp( ) int strcmp(const char *s1, const char *s2); int strncmp(const char *s1, const char *s2, int n);返回值整数:大于返回值整数:大于0、等于、等于0、小于、小于0小小 结结函数的定义和说明函数的定义和说明函数的调用(函数的调用(传值传值、传址传址、引用引用)嵌套调用

40、和递归调用嵌套调用和递归调用函数的参数(函数的参数(默认值默认值)内联函数(内联函数(inline)函数重载(函数重载(参数个数、类型不同参数个数、类型不同)作用域(作用域(4级级)C+系统函数(字符串处理函数)系统函数(字符串处理函数)实实 验验 一一1.调试调试例例4.8、例例4.13,掌握参数默认值的设置,掌握参数默认值的设置和函数重载;和函数重载;2.编制程序,通过调用编制程序,通过调用引用作参数的函数引用作参数的函数,实现,实现两个字符串的交换。两个字符串的交换。1.测试:测试:char a50=“hello”;2. char b50=“how are you”;3.编写程序验证编写

41、程序验证哥德巴赫猜想哥德巴赫猜想:任何一个充分大:任何一个充分大的偶数的偶数(=6)总可以表示成两个素数之和。总可以表示成两个素数之和。作作 业业 题题#includevoid f(int j);void main( ) for(int i(1); i=4; i+) f( i );void f(int j) static int a(10); /内部静态类变量内部静态类变量 int b(1); /自动类变量自动类变量 b+; couta+b+j=a+b+jendl; a+=10;三三(3)10 + 2 + 1 = 1320 + 2 + 2 = 2430 + 2 + 3 = 3540 + 2 +

42、 4 = 46三三(6)(6) 传址调用传址调用#includevoid fun( int, int, int *);void main( ) int x, y, z; fun( 5, 6, &x); fun( 7, x, &y); fun( x, y, &z); coutx,y,zendl;void fun( int a, int b, int *c) b=b+a; *c=b- -a;666实实参:地址参:地址形参:指针形参:指针三三(7) (7) 函数参数的默认值函数参数的默认值#includeint add( int x, int y=8);void main( ) int a(5);

43、coutsum1=add(a)endl; coutsum2=add(a, add(a)endl; coutsum3=add(a, add(a, add(a)endl;int add(int x, int y) return x+y;sum1=13sum2=18sum3=23函数声明函数声明三三(10) (10) 引用作函数返回值引用作函数返回值 #includeint &f(int n, int s ) /函数类型为函数类型为“引用引用” int &m=sn; return m; void main( ) int s =5, 4, 3, 2, 1, 0; f(3, s)=10; /返回值返回值

44、“引用引用”作赋值语句左值作赋值语句左值 coutf(3, s)endl;10 s =5, 4, 3, 10, 1, 0引用引用 float & fun(float r) float temp; temp=r*r*3.14; return temp; void main( ) fun(1.5)=12.4; v不是所有返回的引用都可以作不是所有返回的引用都可以作为为“左值左值”计算!计算!v返回不在作用域范围内的变量返回不在作用域范围内的变量的引用,错误!的引用,错误!问题:引用作函数返回值问题:引用作函数返回值局部变量局部变量 float temp; float & fun(float r)

45、temp=r*r*3.14; return temp; void main( ) fun(1.5)=12.4; /此处此处temp“可见可见” 问题:引用作函数返回值问题:引用作函数返回值全局变量全局变量三三(12)(12) 函数重载函数重载#includevoid ff(int), ff(double);void main( ) float a(88.18); ff (a); char b(a); ff (b); void ff(double x) coutff(double):xendl; void ff(int x) coutff(int):xendl; ff(double): 88.18ff(int): 97三三 1.581114三三 2. 25三三 4.6, 11三三 5. 5!+4!+3!+2!+1!=153三三 8.720三三 9.a=5, b=8a=8, b=5三三 11.u1998abcd

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号