第五章函数省公共课一等奖全国赛课获奖课件.pptx
《第五章函数省公共课一等奖全国赛课获奖课件.pptx》由会员分享,可在线阅读,更多相关《第五章函数省公共课一等奖全国赛课获奖课件.pptx(44页珍藏版)》请在咨信网上搜索。
第五章第五章 C+C+函数函数昆明理工大学昆明理工大学 电信系电信系C C+语言程序设计语言程序设计年3月1第1页本章主要内容本章主要内容l l本章介绍本章介绍C+函数,包含:函数,包含:函数概述函数概述 函数定义与申明函数定义与申明 函数调用函数调用年3月2第2页5.1 函数概述函数概述 C+语言认为函数是一个能完成某一语言认为函数是一个能完成某一独立功效独立功效子程序子程序,也就是,也就是程序模块程序模块。函数就是对复杂问题一个函数就是对复杂问题一个“自顶向下,自顶向下,逐步求精逐步求精”思想表达。思想表达。编程者能够将一个编程者能够将一个大而复杂程序大而复杂程序分解分解为若干个相对独立而且功效单一为若干个相对独立而且功效单一小块程序小块程序(函数)进行编写(函数)进行编写,并经过在各个函数之,并经过在各个函数之间进行间进行调用调用,来实现总体功效。,来实现总体功效。年3月3第3页5.1 函数概述(续)函数概述(续)使用函数优点:使用函数优点:可读性好;可读性好;易于查错和修改;易于查错和修改;便于分工编写,分阶段调试;便于分工编写,分阶段调试;各各个个函函数数之之间间接接口口清清楚楚,便便于于相相互互间间交交换换信息和使用;信息和使用;节约程序代码和存放空间;节约程序代码和存放空间;降低用户总工作量;降低用户总工作量;成为实现结构程序设计思想主要工具;成为实现结构程序设计思想主要工具;扩充语言和计算机原设计能力;扩充语言和计算机原设计能力;便于验证程序正确性。便于验证程序正确性。年3月4第4页5.1 函数概述(续)函数概述(续)设计设计C+程序过程,实际上就是编写函程序过程,实际上就是编写函数过程,最少也要编写一个数过程,最少也要编写一个main()函数。()函数。执行执行C+程序,也就是执行对应程序,也就是执行对应main()()函数。函数。即从即从main()函数第一个左花括号()函数第一个左花括号“”开始,依次执行后面语句,直到最终一开始,依次执行后面语句,直到最终一个右花括号个右花括号“”为止。假如在执行过程中为止。假如在执行过程中碰到其它函数,则调用其它函数。调用完碰到其它函数,则调用其它函数。调用完后,返回到刚才调用函数下一条语句继续后,返回到刚才调用函数下一条语句继续执行。执行。而其它函数也只有在执行而其它函数也只有在执行main()()函数过程中被调用时才会执行。函数过程中被调用时才会执行。年3月5第5页5.1 函数概述(续)函数概述(续)函数能够被一个函数调用,也能够调函数能够被一个函数调用,也能够调用另一个函数,用另一个函数,它们之间能够存在着调用它们之间能够存在着调用上嵌套关系。上嵌套关系。不过,不过,C+不允许函数定义不允许函数定义嵌套,嵌套,即在函数定义中再定义一个函数是即在函数定义中再定义一个函数是非法。非法。C+函数是一个独立完成某个功效语句函数是一个独立完成某个功效语句块,块,函数与函数之间经过输入和输出来联函数与函数之间经过输入和输出来联络。络。年3月6第6页5.2 函数定义与申明函数定义与申明在在C+程序中调用函数之前,程序中调用函数之前,首先要对首先要对函数进行定义函数进行定义。假如调用此函数在前,函。假如调用此函数在前,函数定义在后,就会产生编译错误。数定义在后,就会产生编译错误。为了使函数调用不受函数定义位置影响,为了使函数调用不受函数定义位置影响,能够在调用函数前进行函数申明。能够在调用函数前进行函数申明。这么,这么,不论函数是在哪里定义,只要在调用前进不论函数是在哪里定义,只要在调用前进行函数申明,就能够确保函数调用正当性。行函数申明,就能够确保函数调用正当性。年3月7第7页5.2.1 函数定义函数定义C+中中每每一一个个函函数数都都是是从从四四个个方方面面来来进进行行定定义义:类类型型、函函数数名名、形形式式参参数数表表、函函数体。数体。定义一个函数语法格式为:定义一个函数语法格式为:类型类型 函数名(形式参数表)函数名(形式参数表)函数体;函数体;年3月8第8页5.2.1 函数定义(续)函数定义(续)比如:比如:intmax(inta,intb)intt;if(ab)t=a;elset=b;returnt;年3月9第9页5.2.1 函数定义函数定义类型就是该函数类型类型就是该函数类型,也就是该函数返回,也就是该函数返回值类型,这类型能够是值类型,这类型能够是C+中除函数、数组类中除函数、数组类型之外任何一个正当数据类型,型之外任何一个正当数据类型,包含普通类型、包含普通类型、指针类型和引用类型等。指针类型和引用类型等。函数返回值通常指明了该函数处理结果,函数返回值通常指明了该函数处理结果,由函数体中由函数体中return语句给出语句给出。一个函数能够有。一个函数能够有返回值,也能够无返回值(称为无返回值函数返回值,也能够无返回值(称为无返回值函数或无类型函数)。此时需要使用保留字或无类型函数)。此时需要使用保留字void作作为类型名,而且函数体中也不需要再写为类型名,而且函数体中也不需要再写return语句,或者语句,或者return后面什么也没有。后面什么也没有。每个函数都有类型,假如在函数定义时没每个函数都有类型,假如在函数定义时没有明确指定类型,有明确指定类型,则默认类型为则默认类型为int。年3月10第10页5.2.1 函数定义(续)函数定义(续)函数名是一个函数名是一个有效有效C+标识符标识符,遵照,遵照普普通命名规则通命名规则。在函数名后面必须跟一对小。在函数名后面必须跟一对小括号括号“()()”,用来将函数名与变量名或,用来将函数名与变量名或其它用户自定义其它用户自定义标识符区分开来标识符区分开来。在小括号中能够没有任何信息,也能在小括号中能够没有任何信息,也能够包含形式参数表。够包含形式参数表。C+程序经过使用这程序经过使用这个函数名和实参表能够调用该函数。个函数名和实参表能够调用该函数。主函数名称要求取编译器默认名称主函数名称要求取编译器默认名称main()。()。年3月11第11页5.2.1 函数定义(续)函数定义(续)l l形式参数表又称参数表,写在函形式参数表又称参数表,写在函数名后面一对圆括号内。它可包含任意多数名后面一对圆括号内。它可包含任意多个(含个(含0个,即没有)参数说明项,当多个,即没有)参数说明项,当多于一个时其前后两个参数说明项之间必须于一个时其前后两个参数说明项之间必须用逗号分开。用逗号分开。l l每个参数说明项由一种已定义数每个参数说明项由一种已定义数据类型和一个变量标识符组成,该变量标据类型和一个变量标识符组成,该变量标识符称为该函数形式参数,简称形参,形识符称为该函数形式参数,简称形参,形参前面给出数据类型称为该形参类型。每参前面给出数据类型称为该形参类型。每个形参类型可认为任一种数据类型,包含个形参类型可认为任一种数据类型,包含普通类型、指针类型、数组类型、引用类普通类型、指针类型、数组类型、引用类型等。型等。l l一个函数定义中一个函数定义中可以被可以被省略,表明该函数为无参函数,若省略,表明该函数为无参函数,若用用void取代,则也表明是无参函数,取代,则也表明是无参函数,若若不为空,同时又不是保留字不为空,同时又不是保留字void,则称为带参函数。,则称为带参函数。年3月12第12页5.2.1 函数定义(续)函数定义(续)是一条复合语句,它以左花是一条复合语句,它以左花括号开始,到右花括号结束,中间为一条括号开始,到右花括号结束,中间为一条或若干条或若干条C+语句,用于实现函数执行功语句,用于实现函数执行功效。效。注意:在一个函数体内允许有一个或注意:在一个函数体内允许有一个或多个多个return语句,一旦执行到其中某一个语句,一旦执行到其中某一个return语句时,语句时,return后面语句就不再执后面语句就不再执行,直接返回调用位置继续向下执行。行,直接返回调用位置继续向下执行。年3月13第13页5.2.1 函数定义(续)函数定义(续)函数形参也能够在函数体外说明。函数形参也能够在函数体外说明。函数形参也能够在函数体外说明。函数形参也能够在函数体外说明。以下例:以下例:以下例:以下例:func1(inta,intb)func1(inta,intb)也可写成:也可写成:也可写成:也可写成:func1(a,b)func1(a,b)inta;inta;intb;intb;年3月14第14页5.2.1 函数定义(续)函数定义(续)#includeiostream.h#includeiostream.hintfunc(intn)intfunc(intn)if(n0)if(n0)return1;return1;elseif(n=0)elseif(n=0)return0;return0;elsereturn-1;elsereturn-1;voidmain()voidmain()intn;intn;coutPleasecoutPleaseinputinputn:endl;n:n;cinn;coutnthecoutntheresult:func(n)enresult:func(n)endl;dl;例例5-1:给出以下程序运行结果。:给出以下程序运行结果。年3月15第15页5.2.1 函数定义(续)函数定义(续)此程序运行结果为:此程序运行结果为:此程序运行结果为:此程序运行结果为:Pleaseinputn:Pleaseinputn:2 2 theresult:1theresult:1Pleaseinputn:Pleaseinputn:-2-2 theresult:-1theresult:-1年3月16第16页5.2.1 函数定义(续)函数定义(续)请注意:请注意:请注意:请注意:C+C+中不允许函数定义嵌套,即在中不允许函数定义嵌套,即在中不允许函数定义嵌套,即在中不允许函数定义嵌套,即在函数定义中再定义一个函数是非法。一个函数只函数定义中再定义一个函数是非法。一个函数只函数定义中再定义一个函数是非法。一个函数只函数定义中再定义一个函数是非法。一个函数只能定义在别函数外部,能定义在别函数外部,能定义在别函数外部,能定义在别函数外部,函数定义之间都是平行,函数定义之间都是平行,函数定义之间都是平行,函数定义之间都是平行,相互独立。相互独立。相互独立。相互独立。比如:下面代码在主函数中比如:下面代码在主函数中比如:下面代码在主函数中比如:下面代码在主函数中非法嵌套非法嵌套非法嵌套非法嵌套了一个了一个了一个了一个f f()函数定义:()函数定义:()函数定义:()函数定义:voidmain()voidmain()voidf()voidf()/年3月17第17页5.2.2 函数申明函数申明l l函数申明也称函数模型(或函数函数申明也称函数模型(或函数原型)。在主调函数中,假如要调用另一原型)。在主调函数中,假如要调用另一个函数,则须在本函数或本文件中开头将个函数,则须在本函数或本文件中开头将要被调用函数事先作一申明。申明函数,要被调用函数事先作一申明。申明函数,就是告诉编译器函数返回类型、名称和形就是告诉编译器函数返回类型、名称和形参表组成,方便编译系统对函数调用进行参表组成,方便编译系统对函数调用进行检验。检验。l l函数申明普通格式为:函数申明普通格式为:l l 函数类型函数类型 函数名(形式参数表);函数名(形式参数表);l l除了需在函数申明末尾加上一个除了需在函数申明末尾加上一个分号分号“;”之外,其它内容与函数定义中第之外,其它内容与函数定义中第一行(称函数头)内容一样。一行(称函数头)内容一样。年3月18第18页5.2.2 函数申明(续)函数申明(续)比如:设有一函数定义为:比如:设有一函数定义为:比如:设有一函数定义为:比如:设有一函数定义为:doublefunc1(doublea,intb,floatc)doublefunc1(doublea,intb,floatc)函数体函数体函数体函数体 正确完整函数申明应为:正确完整函数申明应为:正确完整函数申明应为:正确完整函数申明应为:doublefunc1(doublex,inty,floatz);doublefunc1(doublex,inty,floatz);/末尾要加上分号末尾要加上分号末尾要加上分号末尾要加上分号 年3月19第19页5.2.2 函数申明(续)函数申明(续)也能够写为以下形式:也能够写为以下形式:也能够写为以下形式:也能够写为以下形式:doublefunc1(double,int,float);doublefunc1(double,int,float);/函数申明中省略了形参名函数申明中省略了形参名函数申明中省略了形参名函数申明中省略了形参名或写为以下形式:或写为以下形式:或写为以下形式:或写为以下形式:doublefunc1(doublea,intb,floatc);doublefunc1(doublea,intb,floatc);/函数申明中形参名与函数申明中形参名与函数申明中形参名与函数申明中形参名与/函数定义中形参名不一样函数定义中形参名不一样函数定义中形参名不一样函数定义中形参名不一样年3月20第20页5.2.2 函数申明(续)函数申明(续)不能写为以下形式:不能写为以下形式:不能写为以下形式:不能写为以下形式:doublefunc1(x,y,z);doublefunc1(x,y,z);/函数申明中省略了形参类型函数申明中省略了形参类型函数申明中省略了形参类型函数申明中省略了形参类型 或:或:或:或:func1(doublex,inty,floatz);func1(doublex,inty,floatz);/函数申明中省略了函数类型函数申明中省略了函数类型函数申明中省略了函数类型函数申明中省略了函数类型 或:或:或:或:doublefunc1(inty,floatz,doublex);doublefunc1(inty,floatz,doublex);/函数申明中形参次序调换了函数申明中形参次序调换了函数申明中形参次序调换了函数申明中形参次序调换了 年3月21第21页5.3 函数调用函数调用 5.3.1 5.3.1 函数调用格式:函数调用格式:在在在在C+C+中中中中,除除除除了了了了主主主主函函函函数数数数mainmain由由由由系系系系统统统统自自自自动动动动调调调调用用用用外外外外,其其其其它它它它函函函函数数数数都都都都是是是是由由由由主主主主函函函函数数数数直直直直接接接接或或或或间间间间接接接接调调调调用用用用。函函函函数调用语法格式为:数调用语法格式为:数调用语法格式为:数调用语法格式为:函数名函数名函数名函数名 (实际参数表);(实际参数表);(实际参数表);(实际参数表);实参应该与函数定义中形参表中形参一一对实参应该与函数定义中形参表中形参一一对实参应该与函数定义中形参表中形参一一对实参应该与函数定义中形参表中形参一一对应应应应,即个数相等、次序一致且对应参数数据类型,即个数相等、次序一致且对应参数数据类型,即个数相等、次序一致且对应参数数据类型,即个数相等、次序一致且对应参数数据类型相同或相容相同或相容相同或相容相同或相容 。每个实参是一个表示式,而且必。每个实参是一个表示式,而且必。每个实参是一个表示式,而且必。每个实参是一个表示式,而且必须有确定值。须有确定值。须有确定值。须有确定值。年3月22第22页5.3.1 函数调用格式:函数调用格式:如:如:如:如:g1(25)g1(25)/实参是一个整数实参是一个整数实参是一个整数实参是一个整数g2(x)g2(x)/实参是一个变量实参是一个变量实参是一个变量实参是一个变量g3(a,2*b+3)g3(a,2*b+3)/第一个为变量,第二个运算表第一个为变量,第二个运算表第一个为变量,第二个运算表第一个为变量,第二个运算表/达式达式达式达式g4(sin(x),)g4(sin(x),)/第第第第一一一一个个个个为为为为函函函函数数数数调调调调用用用用表表表表示示示示式式式式,第二第二第二第二/个为字符常量个为字符常量个为字符常量个为字符常量g5(&d,*p,x/y-1)g5(&d,*p,x/y-1)/分别为取地址运算、间接访问和分别为取地址运算、间接访问和分别为取地址运算、间接访问和分别为取地址运算、间接访问和/普通运算表示式普通运算表示式普通运算表示式普通运算表示式 年3月23第23页5.3.1 函数调用格式(续)函数调用格式(续)常见函数调用方式有以下两种:常见函数调用方式有以下两种:常见函数调用方式有以下两种:常见函数调用方式有以下两种:l l方方方方式式式式一一一一:将将将将函函函函数数数数调调调调用用用用作作作作为为为为一一一一条条条条表表表表示示示示式式式式语语语语句句句句使使使使用用用用,只只只只要要要要求求求求函函函函数数数数完完完完成成成成一一一一定定定定操操操操作作作作,而而而而不不不不使使使使用用用用其其其其返返返返回回回回值值值值。若若若若函函函函数数数数调调调调用用用用带带带带有返回值,则这个值将会自动丢失。比如:有返回值,则这个值将会自动丢失。比如:有返回值,则这个值将会自动丢失。比如:有返回值,则这个值将会自动丢失。比如:max(3,5);max(3,5);l l方方方方式式式式二二二二:对对对对于于于于含含含含有有有有返返返返回回回回值值值值函函函函数数数数来来来来说说说说,把把把把函函函函数数数数调调调调用用用用语语语语句句句句看看看看作作作作语语语语句句句句一一一一部部部部分分分分,使使使使用用用用函函函函数数数数返返返返回回回回值值值值参参参参加加加加对对对对应应应应运运运运算算算算或或或或执执执执行行行行对对对对应操作。比如:应操作。比如:应操作。比如:应操作。比如:inta=max(3,5);inta=max(3,5);inta=max(3,5)+1;inta=max(3,5)+1;coutmax(3,5)endl;coutmax(3,5)endl;if(f1(a,b)cout”true”endl;if(f1(a,b)cout”true”endl;inta=2;a=max(max(a,3),5);inta=2;a=max(max(a,3),5);年3月24第24页5.3.1 函数调用格式(续)函数调用格式(续)#include#includeintmax(inta,intb,intc)intmax(inta,intb,intc)intt;intt;t=a;t=a;if(bt)t=b;if(bt)t=b;if(ct)t=c;if(ct)t=c;returnt;returnt;voidmain()voidmain()intx,y,z;intx,y,z;cout”Pleasecout”Please inputinput xx yyz:”z:”endl;xyz;cinxyz;intm=max(x,y,z);intm=max(x,y,z);cout”Themaxis:”mcout”Themaxis:”mendl;endl;例例5-2:函数调用。:函数调用。年3月25第25页5.3.2 函数调用过程函数调用过程当调用一个函数时,整个调用过程分当调用一个函数时,整个调用过程分为三步进行,为三步进行,第一步是参数传递,第二步第一步是参数传递,第二步是函数体执行,第三步是返回,即返回到是函数体执行,第三步是返回,即返回到函数调用表示式位置。函数调用表示式位置。年3月26第26页5.3.3 函数调用时参数传递函数调用时参数传递 参数传递称为参数传递称为“实虚结合实虚结合”,即实参向,即实参向形参传递信息,使形参含有确切地含义形参传递信息,使形参含有确切地含义(即含有对应存放空间和初值)。(即含有对应存放空间和初值)。这种传递又分为这种传递又分为两种不一样方式两种不一样方式,一个,一个是按值传递,另一个是地址传递或引用传是按值传递,另一个是地址传递或引用传递。递。年3月27第27页5.3.3 函数调用时参数传递(续)函数调用时参数传递(续)1.1.按值传递按值传递按值传递按值传递以按值传递方式进行参数传递过程为:以按值传递方式进行参数传递过程为:首先计算出实参表示式值,接着给对应形参首先计算出实参表示式值,接着给对应形参变量分配一个存放空间,该空间大小等于该变量分配一个存放空间,该空间大小等于该形参类型长度,然后把已求出实参表示式值形参类型长度,然后把已求出实参表示式值一一存入到为形参变量分配存放空间中,成一一存入到为形参变量分配存放空间中,成为形参变量初值,供被调用函数执行时使用。为形参变量初值,供被调用函数执行时使用。这种传递是把实参表示式值传送给对应形这种传递是把实参表示式值传送给对应形参变量,参变量,故称这种传递方式为故称这种传递方式为“按值传递按值传递”。这种方式被调用函数本身不对实参进行操作,这种方式被调用函数本身不对实参进行操作,也就是说,也就是说,即使形参值在函数中发生了改变,即使形参值在函数中发生了改变,实参值也完全不会受到影响,仍为调用前值。实参值也完全不会受到影响,仍为调用前值。年3月28第28页5.3.3 函数调用时参数传递(续)函数调用时参数传递(续)#includeiostream.h#includeiostream.hvoidswap(int,int);voidswap(int,int);voidmain()voidmain()inta=3,b=4;inta=3,b=4;couta=a,b=“couta=a,b=“bendl;bendl;swap(a,b);swap(a,b);couta=a,b=couta=a,b=bendl;bendl;voidswap(intx,inty)voidswap(intx,inty)intt=x;intt=x;x=y;x=y;y=t;y=t;此程序运行结果为:此程序运行结果为:此程序运行结果为:此程序运行结果为:a=3,b=4a=3,b=4a=3,b=4a=3,b=4例例5-3:按值传递。:按值传递。年3月29第29页5.3.3 函数调用时参数传递(续)函数调用时参数传递(续)2.地址传递地址传递假如在函数定义时将假如在函数定义时将形参类型说明成形参类型说明成指针,指针,对这么函数进行调用时就需要指定对这么函数进行调用时就需要指定地址值形式实参地址值形式实参。这时参数传递方式即为。这时参数传递方式即为地址传递方式。这种地址传递与上述按值地址传递方式。这种地址传递与上述按值传递不一样,传递不一样,它把实参存放地址传送给对它把实参存放地址传送给对应形参,从而使得形参指针和实参指针指应形参,从而使得形参指针和实参指针指向同一个地址向同一个地址。所以,被调用函数中对形。所以,被调用函数中对形参指针所指向地址中内容任何改变都会影参指针所指向地址中内容任何改变都会影响到实参。响到实参。年3月30第30页5.3.3 函数调用时参数传递(续)函数调用时参数传递(续)#includeiostream.h#includeiostream.hvoidswap(int*,int*);voidswap(int*,int*);voidmain()voidmain()inta=3,b=4;inta=3,b=4;couta=a,b=“couta=a,b=“bendl;bendl;swap(&a,&b);swap(&a,&b);couta=a,b=“couta=a,b=“bendl;bendl;voidswap(int*x,int*y)voidswap(int*x,int*y)intt=*x;intt=*x;*x=*y;*x=*y;*y=t;*y=t;此程序运行结果为:此程序运行结果为:此程序运行结果为:此程序运行结果为:a=3,b=4a=3,b=4a=4,b=3a=4,b=3例例5-4:地址传递。:地址传递。年3月31第31页5.3.3 函数调用时参数传递(续)函数调用时参数传递(续)3.3.引用传递引用传递引用传递引用传递按值传递方式轻易了解,但形参值改变不能按值传递方式轻易了解,但形参值改变不能按值传递方式轻易了解,但形参值改变不能按值传递方式轻易了解,但形参值改变不能对实参产生影响;地址传递方式即使能够使得形对实参产生影响;地址传递方式即使能够使得形对实参产生影响;地址传递方式即使能够使得形对实参产生影响;地址传递方式即使能够使得形参改变对对应实参有效,但假如在函数中重复利参改变对对应实参有效,但假如在函数中重复利参改变对对应实参有效,但假如在函数中重复利参改变对对应实参有效,但假如在函数中重复利用指针进行间接访问,用指针进行间接访问,用指针进行间接访问,用指针进行间接访问,会使程序轻易产生错误且会使程序轻易产生错误且会使程序轻易产生错误且会使程序轻易产生错误且难以阅读。难以阅读。难以阅读。难以阅读。假如以引用作为参数,则既能够假如以引用作为参数,则既能够假如以引用作为参数,则既能够假如以引用作为参数,则既能够使得使得使得使得对形参任何操作都能改变对应实参数据对形参任何操作都能改变对应实参数据对形参任何操作都能改变对应实参数据对形参任何操作都能改变对应实参数据,又使函,又使函,又使函,又使函数调用显得方便、自然。引用传递方式是在函数数调用显得方便、自然。引用传递方式是在函数数调用显得方便、自然。引用传递方式是在函数数调用显得方便、自然。引用传递方式是在函数定义时定义时定义时定义时在形参前面加上引用运算符在形参前面加上引用运算符在形参前面加上引用运算符在形参前面加上引用运算符“&”&”。年3月32第32页5.3.3 函数调用时参数传递(续)函数调用时参数传递(续)#includeiostream.h#includeiostream.hvoidswap(int&,int&);voidswap(int&,int&);voidmain()voidmain()inta=3,b=4;inta=3,b=4;couta=a,b=“couta=a,b=“bendl;bendl;swap(a,b);swap(a,b);couta=a,b=“couta=a,b=“bendl;bendl;voidswap(int&x,int&y)voidswap(int&x,int&y)intt=x;intt=x;x=y;x=y;y=t;y=t;此程序运行结果为:此程序运行结果为:此程序运行结果为:此程序运行结果为:a=3,b=4a=3,b=4a=4,b=3a=4,b=3例例5-5:引用传递。:引用传递。年3月33第33页5.3.4 内联函数内联函数内联扩展(内联扩展(内联扩展(内联扩展(inline expansioninline expansion)简称为内联)简称为内联)简称为内联)简称为内联(inlineinline),内联函数也称为内嵌函数。当在一),内联函数也称为内嵌函数。当在一),内联函数也称为内嵌函数。当在一),内联函数也称为内嵌函数。当在一个函数定义或申明前加上关键字个函数定义或申明前加上关键字个函数定义或申明前加上关键字个函数定义或申明前加上关键字inlineinline则就把该则就把该则就把该则就把该函数定义为内联函数,函数定义为内联函数,函数定义为内联函数,函数定义为内联函数,它主要是处理程序运行效它主要是处理程序运行效它主要是处理程序运行效它主要是处理程序运行效率。率。率。率。计算机在执行普通函数调用时,不论该函数计算机在执行普通函数调用时,不论该函数计算机在执行普通函数调用时,不论该函数计算机在执行普通函数调用时,不论该函数多么简单或复杂,都要经过多么简单或复杂,都要经过多么简单或复杂,都要经过多么简单或复杂,都要经过参数传递、执行函数参数传递、执行函数参数传递、执行函数参数传递、执行函数体和返回等操作,这些操作都需要一定时间开销。体和返回等操作,这些操作都需要一定时间开销。体和返回等操作,这些操作都需要一定时间开销。体和返回等操作,这些操作都需要一定时间开销。若把一个函数定义为内联函数后,在程序编译阶若把一个函数定义为内联函数后,在程序编译阶若把一个函数定义为内联函数后,在程序编译阶若把一个函数定义为内联函数后,在程序编译阶段,段,段,段,编译器就会把每次调用该函数地方都直接替编译器就会把每次调用该函数地方都直接替编译器就会把每次调用该函数地方都直接替编译器就会把每次调用该函数地方都直接替换为该函数体中代码,换为该函数体中代码,换为该函数体中代码,换为该函数体中代码,由此省去函数调用及对应由此省去函数调用及对应由此省去函数调用及对应由此省去函数调用及对应保留现场、参数传递和返回操作,从而加紧整个保留现场、参数传递和返回操作,从而加紧整个保留现场、参数传递和返回操作,从而加紧整个保留现场、参数传递和返回操作,从而加紧整个程序执行速度。程序执行速度。程序执行速度。程序执行速度。年3月34第34页5.3.4 内联函数(续)内联函数(续)例例例例5-65-6:#includeiostream.h#includeiostream.hinlineintabs(intx)inlineintabs(intx)returnx0?-x:x;returnx0?-x:x;voidmain()voidmain()inta,b=3,c,d=-4;inta,b=3,c,d=-4;a=abs(b);a=abs(b);c=abs(d);c=abs(d);couta=a,c=cendl;couta=a,c=cendl;此程序运行结果为:此程序运行结果为:此程序运行结果为:此程序运行结果为:a=3,c=4a=3,c=4年3月35第35页5.3.4 内联函数(续)内联函数(续)内内内内联联联联函函函函数数数数能能能能够够够够在在在在一一一一开开开开始始始始仅仅仅仅定定定定义义义义或或或或申申申申明明明明一一一一次次次次,但但但但必必必必须须须须在在在在函函函函数数数数被被被被调调调调用用用用之之之之前前前前定定定定义义义义或或或或申申申申明明明明。不不不不然然然然,编编编编译译译译器器器器不不不不认认认认为为为为那那那那是是是是内内内内联联联联函函函函数数数数,依依依依然然然然如如如如同同同同对对对对普普普普通通通通函函函函数数数数那样处理该函数调用过程那样处理该函数调用过程那样处理该函数调用过程那样处理该函数调用过程 从从从从用用用用户户户户角角角角度度度度看看看看,调调调调用用用用内内内内联联联联函函函函数数数数和和和和普普普普通通通通函函函函数数数数没没没没有任何区分。有任何区分。有任何区分。有任何区分。请注意:请注意:请注意:请注意:内联函数内联函数内联函数内联函数函数体有一些限制函数体有一些限制函数体有一些限制函数体有一些限制:内联:内联:内联:内联函数中不能含有任何循环以及函数中不能含有任何循环以及函数中不能含有任何循环以及函数中不能含有任何循环以及switchswitch和和和和gotogoto语句;语句;语句;语句;内联函数中不能说明数组;递归函数(自己调用内联函数中不能说明数组;递归函数(自己调用内联函数中不能说明数组;递归函数(自己调用内联函数中不能说明数组;递归函数(自己调用自己函数)不能定义为内联函数。自己函数)不能定义为内联函数。自己函数)不能定义为内联函数。自己函数)不能定义为内联函数。年3月36第36页5.3.5 重载函数重载函数函函函函数数数数重重重重载载载载又又又又称称称称为为为为函函函函数数数数多多多多态态态态性性性性,是是是是指指指指同同同同一一一一个个个个函函函函数数数数名名名名对对对对应应应应着着着着多多多多个个个个不不不不一一一一样样样样函函函函数数数数。所所所所谓谓谓谓“不不不不一一一一样样样样”是是是是指指指指这这这这些些些些函函函函数数数数形形形形参参参参表表表表必必必必须须须须互互互互不不不不相相相相同同同同,或或或或者者者者是是是是形形形形参参参参个个个个数数数数不不不不一一一一样样样样,或或或或者者者者是是是是形形形形参参参参类类类类型型型型不不不不一一一一样样样样,或或或或者者者者是是是是二二二二者者者者都都都都不不不不相相相相同同同同,不不不不然然然然将将将将无无无无法法法法实实实实现现现现函函函函数数数数重重重重载载载载。比比比比如如如如,下下下下面是正当重载函数:面是正当重载函数:面是正当重载函数:面是正当重载函数:intfunc1(int,int);intfunc1(int,int);intfunc1(int);intfunc1(int);doublefunc1(int,long);doublefunc1(int,long);doublefunc1(long);doublefunc1(long);年3月37第37页5.3.5 重载函数(续)重载函数(续)重载函数类型,重载函数类型,重载函数类型,重载函数类型,即函数返回类型能够相同,即函数返回类型能够相同,即函数返回类型能够相同,即函数返回类型能够相同,也能够不一样。也能够不一样。也能够不一样。也能够不一样。但假如仅仅是返回类型不一样但假如仅仅是返回类型不一样但假如仅仅是返回类型不一样但假如仅仅是返回类型不一样而函数名相同、形参表也相同,而函数名相同、形参表也相同,而函数名相同、形参表也相同,而函数名相同、形参表也相同,则是不正当,则是不正当,则是不正当,则是不正当,编译器会报编译器会报编译器会报编译器会报“语法错误语法错误语法错误语法错误”。如:如:如:如:intfunc1(inta,intb);intfunc1(inta,intb);doublefunc1(inta,intb);doublefunc1(inta,intb);除类型外都相同情况除类型外都相同情况除类型外都相同情况除类型外都相同情况 ,编译器不认为是重,编译器不认为是重,编译器不认为是重,编译器不认为是重载函数载函数载函数载函数 ,只认为是对同一个函数原型屡次申明,只认为是对同一个函数原型屡次申明,只认为是对同一个函数原型屡次申明,只认为是对同一个函数原型屡次申明 。在调用一个重载函数在调用一个重载函数在调用一个重载函数在调用一个重载函数func1func1()时,编译器()时,编译器()时,编译器()时,编译器必须判断函数名必须判断函数名必须判断函数名必须判断函数名func1func1到底是指哪个函数。它是到底是指哪个函数。它是到底是指哪个函数。它是到底是指哪个函数。它是经过编译器,经过编译器,经过编译器,经过编译器,依据实参个数和类型对全部依据实参个数和类型对全部依据实参个数和类型对全部依据实参个数和类型对全部func1func1()函数形参一一进行比较,从而调用一个最()函数形参一一进行比较,从而调用一个最()函数形参一一进行比较,从而调用一个最()函数形参一一进行比较,从而调用一个最匹配函数。匹配函数。匹配函数。匹配函数。年3月38第38页5.3.6 带默默认形参形参值函数函数在在C+语言中调用函数时,通常要为函语言中调用函数时,通常要为函数每个形参给定对应实参。数每个形参给定对应实参。若没有给出实若没有给出实参,则按指定默认值进行工作。参,则按指定默认值进行工作。当一个函数现有定义又有申明时当一个函数现有定义又有申明时,形形参默认值必须在申明中指定,参默认值必须在申明中指定,而不能放在而不能放在定义中指定。定义中指定。只有当函数没有申明时只有当函数没有申明时,才才能够在函数定义中指定形参默认值。能够在函数定义中指定形参默认值。年3月39第39页5.3.6 带默默认形参形参值函数(函数(续)默认值定义必须默认值定义必须默认值定义必须默认值定义必须恪守从右到左次序恪守从右到左次序恪守从右到左次序恪守从右到左次序,假如某,假如某,假如某,假如某个形参没有默认值,则它左边参数就不能有默认个形参没有默认值,则它左边参数就不能有默认个形参没有默认值,则它左边参数就不能有默认个形参没有默认值,则它左边参数就不能有默认值。值。值。值。如:如:如:如:voidfunc1(inta,double- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五 函数 公共课 一等奖 全国 获奖 课件
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文