《C++程序设计函数ppt课件.pptx》由会员分享,可在线阅读,更多相关《C++程序设计函数ppt课件.pptx(103页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益程序设计与算法语言 C+程序设计函数为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益本章内容简要介绍简要介绍函数调用时的内部实现机制,以及函数调用时的内部实现机制,以及与此相关的内存分配机制、变量生与此相关的内存分配机制、变量生命期和作用域;函数重载,递归算命期和作用域;函数重载,递归算法、内联函数、默认参数函数以及法、内联函数、默认参数函数以及多文件组织、编译预处理、工程文多文件组织、编译预处理、工程文件和运行
2、库函数。件和运行库函数。信息科学与工程学院第3章 函数2为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益内容安排n3.1 函数的定义与调用n3.2 函数的参数传递、返回值及函数声明n3.3 全局变量和局部变量n3.4 函数调用机制n3.5 作用域与标示符的可见性n3.6 存储类型与标示符的生命期n3.7 函数的递归调用n3.8 函数的重载、内联及默认参数信息科学与工程学院第3章 函数3为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1 函数的定义与调用n3
3、.1.1 函数概述n3.1.2 函数的定义n3.1.3 函数的调用信息科学与工程学院第3章 函数4为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1.1 函数概述n函数是程序基本组成模块,可重复使用n相对独立n经常使用n可把一个复杂任务分解成为若干个易于解决的小任务,充分体现逐步细化的设计思想n使用时只考虑其功能和接口信息科学与工程学院第3章 函数5为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1.1 函数概述nC+程序由若干函数组成n一般函数可调用
4、其他函数,也可被其他函数调用n其中存在一个函数称为主函数(入口函数)。入口函数是程序执行的入口,它可调用其他函数,但不可被调用nmain()nWinMain()信息科学与工程学院第3章 函数6为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1.1 函数概述n函数调用层次关系信息科学与工程学院第3章 函数7main()fun2()fun1()fun3()funa()funb()func()为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1.1 函数概述n
5、函数按是否系统预定义可分为n n库函数库函数(或标准函数):是由编译系统预定义的。例如:一些常用的数学计算函数、字符串处理函数、图形处理函数、标准输入输出函数等n库函数都按功能分类,集中说明在不同的头文件头文件中n用户只需在自己的程序中包含某个头文件头文件,就可直接使用该文件中定义定义(准确说是声明声明)的函数n用户根据需要将某个具有相对独立功能的程序定义为函数,称为自定义函数自定义函数信息科学与工程学院第3章 函数8为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1.1 函数概述n函数按是否带有参数可分为n无参函数:不需
6、要输入参数的函数n有参函数:有输入参数的函数信息科学与工程学院第3章 函数9为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1.2 函数的定义n函数定义:function definitionn函数构成n函数头:定义函数功能功能和接口接口的全部要素n函数名:the namename of the functionn函数参数:the types and number of parametersparameters(argumentsarguments)n函数返回值类型:the returnreturn typetypen函数
7、体:定义函数的算法实现n函数必须先定义后使用信息科学与工程学院第3章 函数10为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1.2 函数的定义n无参函数n基本格式数据类型数据类型函数名函数名(void)函数体函数体n数据类型指函数返回值返回值类型,可是任一种数据类型,默认为返回整型值(但新标准要求写明,不用默认方式)。没有返回值应将返回值类型定义为voidvoidn函数名采用合法标识符表示n参数括号中的voidvoid通常省略,但括号不能省略n函数体由一系列语句组成(函数体可为空,称为空函数空函数)信息科学与工程学院第3
8、章 函数11void sayHello()cout=b?a:b);为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1.2 函数的定义n根据参数和返回值,有4种类型函数n需要参数,并返回值n需要参数,不返回值n不需参数,但返回值n不需参数,不返回值信息科学与工程学院第3章 函数14为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1.2 函数的定义n函数头用来反映函数的功能和使用接口,它所定义的是“做什么”。即,明确了“黑匣子”的输入输出部分,输入就是参数
9、,输出就是函数的返回值。只有那些功能上起自变量作用的变量才必须作为参数定义在参数表中n函数体中具体描述“如何做”,因此除参数之外的为实现算法所需用的变量定义在函数体内nC+中不允许函数的嵌套定义,即,在一个函数中定义另一个函数信息科学与工程学院第3章 函数15为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1.3 函数的调用n所谓函数调用,就是使程序转去执行函数体n除主函数外,其他任何函数都不能单独作为程序运行n任何函数功能的实现都是通过被主函数直接或间接调用进行的信息科学与工程学院第3章 函数16为了规范事业单位聘用关系
10、,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1.3 函数的调用n无参函数的调用格式函数名函数名()n有参函数的调用格式函数名函数名(实际参数表实际参数表)n实际参数(actual argumentsarguments)简称实参,用来将实际参数的值传递给形参,因此可是常量、具有值的变量或表达式信息科学与工程学院第3章 函数17ParametersParameters are the namesnames of the values passed to a function by a function call.Arguments Argumen
11、ts are the valuesvalues the function expects to receive.为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1.3 函数的调用n调用无返回值的函数可单独成为函数调用语句,即调用格式加分号n调用有返回值的函数将产生一个数据值,因此函数调用通常出现在表达式中n返回值参与表达式计算,例如:赋值n在条件语句中直接参与逻辑运算信息科学与工程学院第3章 函数18为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.1.
12、3 函数的调用信息科学与工程学院第3章 函数19【例例3.13.1】输入两个实数,输出其中较大的数。其中求两个实输入两个实数,输出其中较大的数。其中求两个实 数中的较大数用函数数中的较大数用函数完成完成floatfloat max(max(floatfloat x,x,floatfloat y)y)returnreturn (x=y?x:y(x=y?x:y););intint main()main()floatfloat x,y;x,y;coutcout输入两个实数:输入两个实数:endl;xy;cinxy;coutxcoutx和和yy中较大数中较大数max(max(x,y)endl;x,y)
13、endl;returnreturn 0;0;为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.2 函数的参数传递、返回值及函数声明n3.2.1 函数的参数传递及传值调用n3.2.2 函数返回值n3.2.3 函数声明信息科学与工程学院第3章 函数20为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.2.1 函数的参数传递及传值调用n函数调用首先要进行参数传递n传递的方向是由实参传递给形参n传递过程n先计算实参表达式的值n再将该值传递给对应的形参变量n一般情况
14、下,实参和形参的个数和排列顺序应一一对应,并且对应参数应类型匹配(赋值兼容)。即,实参的类型可转化为形参类型,而对应参数的参数名则不要求相同信息科学与工程学院第3章 函数21为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.2.1 函数的参数传递及传值调用n调用形式n n传值传值(valuevalue):传递实参实参的值值,需要复制n n引用引用(referencereference):传递实参实参的别名别名(aliasalias)信息科学与工程学院第3章 函数22为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制
15、的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.2.1 函数的参数传递及传值调用n传值调用n将实参实参的值复制给形参形参。当两者不匹配时,编译器将实参转化为与形参一致的类型n按参数位置对应,而不是按参数名对应n在函数中参加运算的是形参,而实参不会发生任何改变n起了一种隔离作用信息科学与工程学院第3章 函数23为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益信息科学与工程学院第3章 函数24【例例3.23.2】说明实参和形参对应关系的说明实参和形参对应关系的示例示例float float powerpower(flo
16、at float x x,int int n n)/求求x x的的n n次幂次幂float float pow=1;pow=1;while while(n-)pow*=x;n-)pow*=x;return return pow;pow;int int main()main()int int n=3;n=3;float float x=4.6;x=4.6;char char c=a;c=a;coutcoutpower(power(x,n)=x,n)=power(power(x,n)endl;x,n)endl;coutpower(c,n)=coutpower(c,n)=power(power(c,
17、n)endlc,n)endl;coutpower(n,x)=coutpower(n,x)=power(power(n,x)endln,x)endl;return return 0;0;power(4.6,3)=97.336power(4.6,3)=97.336power(a,3)=912673power(a,3)=912673power(3,4.6)=81power(3,4.6)=81为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.2.1 函数的参数传递及传值调用n n传地址(addressaddress)n 一种特殊的传
18、值传值方式n虽然复制的也是值,但是可直接对地址所指向的内容进行读写操作,即,无法直接隔离形参形参对实实参参的影响n包括指针指针(pointerpointer)和数组的名称数组的名称(the name of the name of the arraythe array)都可实现传地址的任务信息科学与工程学院第3章 函数25为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.2.2 函数返回值n对于有返回值的函数,在函数的出口处必须用returnreturn语句将要返回的值返回给调用者n格式:return 表达式表达式;n步骤n计
19、算表达式n类型转化n返回值信息科学与工程学院第3章 函数26为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.2.2 函数返回值n函数一旦执行到return语句便会终止函数执行,返回调用单元n对于没有返回值的函数,应将返回值类型定义为void,函数体内可没有return语句,当需要在程序指定位置退出时,可在该处放置一个:return;信息科学与工程学院第3章 函数27为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益信息科学与工程学院第3章 函数28【例例3.
20、33.3】设计函数,根据三角形的三边长求面积。设计函数,根据三角形的三边长求面积。如果不能构成三角形,给出提示如果不能构成三角形,给出提示信息信息float float TriangleArea(TriangleArea(float float a,a,float float b,b,float float c)c)if if(a+b=c)|(a+c=b)|(b+c=a)a+b=c)|(a+c=b)|(b+c=a)return return-1-1;float float s;s;s s=(a+b+c)/2;=(a+b+c)/2;returnreturn sqrt(s sqrt(s*(s-a)
21、*(s-b)*(s-c)*(s-a)*(s-b)*(s-c);int int main()main()float float a,b,c,area;a,b,c,area;cout cout输入三角形三边输入三角形三边a,b,c:endl;a,b,c:abc;cinabc;area=area=TriangleArea(aTriangleArea(a,b,c);,b,c);if if(area=area=-1-1)cout(a,b,c)cout(a,b,c)不能构成三角形!不能构成三角形!endl;endl;else elsecoutcout三角形三角形(a,b,c)(a,b,c)面积为:面积为:
22、areaendl;areaendl;return return 0;0;为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.2.3 函数声明n函数声明的引入n语法上对程序文件中函数的排列次序要求满足先定义后使用n但从结构化程序设计的角度,通常是先调用后定义n使用函数声明函数声明(function declarationsfunction declarations),则既符合由粗到精的思维方式,又满足了语法要求信息科学与工程学院第3章 函数29为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度
23、,保障用人单位和职工的合法权益3.2.3 函数声明n函数声明的格式 函数返回值类型函数返回值类型函数名函数名(形参表形参表);n是一条以分号结束的语句n各形参之间以逗号分隔n形参表可逐个列出每个参数的类型和参数名,也可只列出每个形参的类型,而参数名可省略信息科学与工程学院第3章 函数30为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.2.3 函数声明n函数声明和所定义的函数必须在以下几方面完全对应一致,否则将导致编译错误n返回值类型n函数名n形参个数n形参类型n形参次序信息科学与工程学院第3章 函数31为了规范事业单位聘用
24、关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益信息科学与工程学院第3章 函数32【例例3.43.4】输出所有满足下列条件的正整数输出所有满足下列条件的正整数mm:10m100010m1000且且mm、mm2 2、mm3 3均为回文数均为回文数boolbool palindrome palindrome(intint););/函数原型函数原型int int main()main()intint m;m;coutcoutsetw(10)msetw(20)m*msetw(20)m*m*mendl;setw(10)msetw(20)m*msetw(20
25、)m*m*mendl;for for(m=11;m 1000;m+)m=11;m 1000;m+)if if(palindrome(palindrome(m)m)&palindrome(palindrome(m*m)m*m)&palindrome(palindrome(m*m*m)m*m*m)coutsetw(10)msetw(20)m*m coutsetw(10)msetw(20)m*m setw(20)m*m*mendl;setw(20)m*m*m 0);n 0);for for(intint j=0;j i;j+)n=n*10+digitj;j=0;j i;j+)n=n*10+digit
26、j;/反向装配反向装配returnreturn(n=m);(n=m);为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益作业nP102:习题3.1.1。抄写nP102:习题3.1.7的(2)nP103:习题3.3信息科学与工程学院第3章 函数33为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益2013年11月21日实验内容n必作部分n实验六:“文本文件的简单应用”中的实验内容3和4n实验七:“函数的基本概念”中的实验内容3和4n教材习题3.5n选作部分n实验七:
27、“函数的基本概念”中的范例2信息科学与工程学院第3章 函数34为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.3 全局变量和局部变量n n变量由于定义位置的不同,在程序中的可见(可被使用)性也随之不同n3.3.1 变量的存储机制与C+的内存布局n3.3.2 全局变量n3.3.3 局部变量信息科学与工程学院第3章 函数35为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.3.1 变量的存储机制与C+的内存布局n程序运行时内存空间的分配信息科学与工程学院第3
28、章 函数36自由存储区自由存储区自由存储区自由存储区 (动态数据)(动态数据)(动态数据)(动态数据)栈区(函数局部数据)栈区(函数局部数据)栈区(函数局部数据)栈区(函数局部数据)mainmain函数局部数据函数局部数据函数局部数据函数局部数据全局数据区(全局、静态)全局数据区(全局、静态)全局数据区(全局、静态)全局数据区(全局、静态)代码区(程序代码)代码区(程序代码)代码区(程序代码)代码区(程序代码)为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益n存储区域说明n n代码区代码区:存放程序代码,即程序中各个函数的代码
29、块n n全局数据区全局数据区:存放全局数据和静态数据(分配该区时内存全部清零,结果变量的所有字节自动初始化为零)n n栈区栈区:存放局部变量,如函数中的变量等(分配栈区时不处理内存,即变量取随机值)n n自由存储区自由存储区(堆):存放与指针相关的动态数据动态数据(分配自由存储区时不处理内存)自由存储区自由存储区自由存储区自由存储区 动态数据动态数据动态数据动态数据栈区栈区栈区栈区函数局部数据函数局部数据函数局部数据函数局部数据mainmain函数局部数据函数局部数据函数局部数据函数局部数据全局数据区全局数据区全局数据区全局数据区全局、静态全局、静态全局、静态全局、静态代码区代码区代码区代码区
30、程序代码程序代码程序代码程序代码信息科学与工程学院第3章 函数373.3.1 变量的存储机制与C+的内存布局为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.3.2 全局变量n n全局变量:在所有函数之外定义的变量n全局变量可定义在程序开头,也可定义在任何位置n该全局变量在定义处之后的任何位置都是可以访问的n作为共享数据的一种常规方法信息科学与工程学院第3章 函数38为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.3.2 全局变量信息科学与工程学院第3章
31、 函数39【例例3.53.5】多个函数使用全局变量的例子多个函数使用全局变量的例子intint n=100 n=100;voidvoid func()func()n*=2;n*=2;intint main()main()n*=2;n*=2;coutnendl;coutnendl;func();func();coutnendl;coutnendl;returnreturn 0;0;200400为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.3.3 局部变量n n局部变量:定义在函数内或块(例如:复合语句)内的变量n存储在栈中
32、n动态分配n是程序中使用最广泛的变量形式n局部变量在程序运行到它所在的块时建立在栈中,该块执行完毕局部变量占有的空间即被释放信息科学与工程学院第3章 函数40为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.3.3 局部变量信息科学与工程学院第3章 函数41【例例3.63.6】使用局部变量的例子使用局部变量的例子void void fun()fun()auto int auto int t=5;t=5;/fun()/fun()中的局部变量,中的局部变量,autoauto可省略可省略coutfun()coutfun()中的中的
33、t=tendl;t=tendl;int int main()main()float float t=3.5;t=3.5;/main()/main()函数中的局部变量函数中的局部变量coutmain()coutmain()中的中的t=tendl;t=tendl;fun();fun();coutmain()coutmain()中的中的t=tendl;t=tendl;return return 0;0;为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.4 函数调用机制n调用过程n建立栈空间n保护现场:主调函数运行状态和返回地址入栈
34、n为被调函数中的局部变量(包括形参形参)在栈栈上分配空间,并完成参数传递n执行被调函数函数体n释放被调函数中局部变量占用的栈空间n恢复现场:取主调函数运行状态及返回地址,释放栈空间n继续主调函数后续语句信息科学与工程学院第3章 函数42为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.4 函数调用机制信息科学与工程学院第3章 函数43函数调用时内存变化的例子函数调用时内存变化的例子voidvoid fun1(fun1(intint,intint););voidvoid fun2(fun2(floatfloat););inti
35、nt main()main()intint x=1,y=2;x=1,y=2;fun1(fun1(x,y);x,y);returnreturn 0;0;voidvoid fun1(fun1(intint a,a,intint b)b)floatfloat x=3;x=3;fun2(xfun2(x););voidvoid fun2(fun2(floatfloat y)y)intint x;x;OS运行状态及返回地址运行状态及返回地址1(x)2(y)main运行状态及返回地址运行状态及返回地址1(a)2(b)3(x)fun1运行状态及返回地址运行状态及返回地址3(y)(x)为了规范事业单位聘用关系,
36、建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.4 函数调用机制n任何一个函数的在执行过程中只能使用该函数中定义的局部变量局部变量n函数执行完毕后其变量单元即被释放n不同函数中的局部变量各自独立,即使变量名相同,这是由于它们各自占用不同的内存单元信息科学与工程学院第3章 函数44OS运行状态及返回地址运行状态及返回地址1(x)2(y)main运行状态及返回地址运行状态及返回地址1(a)2(b)3(x)fun1运行状态及返回地址运行状态及返回地址3(y)(x)为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障
37、用人单位和职工的合法权益3.5 作用域与标示符的可见性n n作用域:指标识符能够被使用的范围n只在作用域内标识符才可被访问(称为可见)n任何标识符作用域的起始点为标识符说明处n局部域n块域n函数声明声明域n文件域(全局域)信息科学与工程学院第3章 函数45为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.5 作用域与标示符的可见性n n块域块块指一对大括号大括号()括起来的程序段块中定义的标识符,作用域在块内复合语句中定义的标识符,作用域仅在该复合语句中由于函数也是一个块,因此函数中定义的标识符,包括形参形参和函数体中定义的
38、局部变量,作用域都在该函数内,也称作函数域函数域信息科学与工程学院第3章 函数46为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益信息科学与工程学院第3章 函数47【例例3.73.7】输入两数,将两数按从大到小的顺序保输入两数,将两数按从大到小的顺序保存,并输出结果存,并输出结果int int main()main()int int a,b;a,b;/函数内定义局部变量,具有函数域函数内定义局部变量,具有函数域coutcout输入两整数:输入两整数:endl;ab;cinab;couta=atb=bendl;couta=atb
39、=b=ab=a)/使使a a中保存大数,中保存大数,b b中保存小数中保存小数intint t t;/块中定义局部变量,具有块作用域块中定义局部变量,具有块作用域t=a;a=b;b=t;t=a;a=b;b=t;/交换交换a a和和b b的值的值 couta=atb=bendl;couta=atb=bendl;return return 0;0;couttendl;couttendl;为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.5 作用域与标示符的可见性n块域n局部变量具有局部作用域n程序在不同块中可以使用同名变量。这些
40、同名变量各自在自己的作用域中可见,在其他地方不可见信息科学与工程学院第3章 函数48为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益信息科学与工程学院第3章 函数49【例例3.83.8】设计函数完成两数交换,并用主函数进行设计函数完成两数交换,并用主函数进行测试,看是否成功测试,看是否成功voidvoid swap(swap(intint,intint););intint main()main()intint a,b;a,b;/main()/main()中定义的中定义的a a和和b b,作用域为,作用域为main()main(
41、)coutcout输入两整数:输入两整数:ab;ab;coutcout调用前:实参调用前:实参a=a,b=bendl;a=a,b=bendl;swap swap(a,b);a,b);coutcout调用后:实参调用后:实参a=a,b=bendl;a=a,b=bendl;/发现交换失败发现交换失败returnreturn 0;0;voidvoid swap(swap(intint a,a,intint b)b)/swap()/swap()中定义的中定义的a a和和b b,作用域为,作用域为swap()swap()coutcout调用中调用中endl;endl;coutcout交换前:形参交换前:
42、形参a=a,b=bendl;a=a,b=bendl;intint t;t;t=a;a=b;b=t;t=a;a=b;b=t;/交换交换a a和和b b的值的值coutcout交换后:形参交换后:形参a=a,b=bendl;a=a,b=bendl;为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益信息科学与工程学院第3章 函数50【例例3.83.8】设计函数完成两数交换,并用主函数进设计函数完成两数交换,并用主函数进行测试,看是否成功行测试,看是否成功3(a)5(b)3(a)5(b)(t)3(a)5(b)5(a)3(b)3(t)3(
43、a)5(b)3(a)5(b)执行执行main()main()调用调用swap()swap()执行执行swap()swap()返回返回main()main()为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.5 作用域与标示符的可见性n块域n对于嵌套块中有同名局部变量,服从局部优先原则n如果块内定义的局部变量与全局变量同名,块内仍然局部变量优先。但与块作用域不同的是,在块内可以通过域运算符“:”访问同名的全局变量信息科学与工程学院第3章 函数51为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用
44、制度,保障用人单位和职工的合法权益信息科学与工程学院第3章 函数52【例例3.93.9】显示同名变量可见性的例子显示同名变量可见性的例子intint n=100 n=100;intint main()main()intint i=200 i=200,j=300 j=300;/输出全局变量输出全局变量n n和外层局部变量和外层局部变量i i和和j jcout ntitjendl;cout ntitjendl;intint i=500 i=500,j=600 j=600,n n;/内层块内层块 n=i+j;n=i+j;/输出内层局部变量输出内层局部变量n n、i i和和j j cout ntitj
45、 endl;cout ntitj endl;/输出全局变量输出全局变量n n coutcout:nendl;nendl;n=i+j;n=i+j;/修改全局变量修改全局变量/输出全局变量输出全局变量n n和外层局部变量和外层局部变量i i和和j jcout ntitj endl;cout ntitj endl;returnreturn 0;0;为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.5 作用域与标示符的可见性n n函数声明域n函数声明声明不是定义函数,在函数声明时,其中的形参作用域只在声明中,即作用域结束于右括号n正
46、是由于形参不能被程序的其他地方引用,所以通常只要声明形参个数和类型,形参名可省略信息科学与工程学院第3章 函数53为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.5 作用域与标示符的可见性n n文件作用域(也称全局作用域)n定义在所有函数之外的标识符,具有文件作用域,作用域为从定义处到整个源文件结束n文件中定义的全局变量全局变量和函数函数都具有文件作用域n如果某个文件中说明了具有文件作用域的标识符,该文件又被另一个文件包含,则该标识符的作用域延伸到新的文件中信息科学与工程学院第3章 函数54为了规范事业单位聘用关系,建立和
47、完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.6 存储类型与标示符的生命期n存储类型决定标识符的存储区域n n编译系统编译系统在不同区域为不同存储类型的标识符分配空间n生命期指的是标识符从获得空间到空间释放之间的时间n由于存储区域不同,标识符的生命期也不同n标识符被访问条件n在其生命期n在其作用域信息科学与工程学院第3章 函数55为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.6.1 存储类型nC+中关于存储类型的说明符有四个n nautoauton nregisterregist
48、ern nstaticstaticn nexternexternn用auto和register修饰的称为自动存储类型自动存储类型n用static修饰的称为静态存储类型n用extern修饰的称为外部存储类型信息科学与工程学院第3章 函数56为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.6.1 存储类型n自动存储类型n自动变量为用autoauto说明的变量(通常auto省略)n n局部变量局部变量都是自动变量,生命期开始于块的执行,结束于块的结束n自动变量的空间分配在栈栈中,块开始执行时系统自动分配空间,块执行结束时系统自动
49、释放空间n自动变量的生命期生命期和作用域作用域是一致的n为提高程序运行效率,可将某些变量保存在寄存器寄存器中,即,用registerregister说明为寄存器变量(但不提倡使用)register int i;信息科学与工程学院第3章 函数57为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.6.1 存储类型n静态存储类型n nstaticstatic说明的变量称为静态变量。根据定义的位置不同,还分为n局部静态变量,也称内部静态变量n全局静态变量,也称外部静态变量n静态变量均存储在全局数据区全局数据区,如果程序未显式给出初始
50、化值,系统自动初始化为全零,且初始化只进行一次n静态变量占有的空间要到整个程序执行结束才释放,故静态变量具有全局生命期信息科学与工程学院第3章 函数58为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益3.6.1 存储类型n静态存储类型n n局部静态变量局部静态变量是定义在块块中的静态变量,当块第一次被执行时,编译系统在全局数据区为其开辟空间并保存数据,该空间一直到整个程序结束才释放n具有局部作用域n但却具有全局生命期n n全局静态变量全局静态变量n具有全局作用域和生命期信息科学与工程学院第3章 函数59为了规范事业单位聘用关系