版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、白 雪 飞中国科学技术大学电子科学与技术系Dept. of Elec. Sci. & Tech., USTCFall, 2003l函数概述l函数定义的一样形式l函数的调用、指标和返回值l局部变量和全局变量l变量的存储类型l内部函数和外部函数lC语言用函数实现程序模块化l一个程序由一个或多个源程序文件组成l一个源程序文件由一个或多个函数组成lC程序的履行从main函数最先,同时回到main函数结束l函数之间能够彼此调用,或调用自身l不能调用main函数l函数之间彼此独站,不存在从属关系l函数定义形式l返回类型 函数名(指标表明)ll 表明部分l 语句ll返回类型、指标、函数体内容都可没有
2、ldummy()l* does nothing & returns nothing *l对于“返回类型”l指函数返回值的类型l如果省略此项,那么信任返回类型是intl如果无返回值,那么定义返回类型为voidl对于“指标表明”l类型 形参名, 类型 形参名, .l对于“表明部分”l指变量、函数的表明int max(int x, int y)int z;z = xy?x:y;return z;int min(int x, int y)return xy?x:y; lmax(a, 3); *函数调用*l值传递l实参对形参的信息传递是“值传递”l单向传递l只能把实参的值传递给形参l不能把形参的
3、值传递给实参l对形参的值所作的改变不能带回给实参l实参和形参是差别的变量l具有差别的存储空间l具有差别的生活期和作用域void swap(int x, int y)int t;t=x, x=y, y=t;void main()int a=1, b=4;swap(a, b);1a4b1x4y41l形式l形式一:return;l形式二:return expression;l功能l函数返回语句l结束函数调用l似果需要,还能够带回函数返回值l返回值的讲明l函数返回值的类型在函数定义中指定l函数返回值通过函数中的return语句获得l如果函数无返回值,那么能够没有return语句lreturn语句后的表
4、达式类型,应与函数返回值类型一样,或能够兼容赋值;两者类型差别时,自动做类型变形l函数需要返回值时,如果贫乏return语句,或return语句未带返回值,那么返回一个不确定值l一样形式l函数名(实参表列)l讲明l纵然没有实参,()也不能省略l多个实参之间用逗号分隔l实介入形参按次序一一对应,类型应匹配l实参的求值次序不确定,应幸免对此敏感的调用形式lprintf(%d,%d, i, i+);l函数语句lprintf(%dn, i);l函数表达式l(c + d * max(a,b) % el函数指标lgcd(max(a,b), min(c, d)l讲明l函数调用能够看作同返回类型的表达式使用l
5、同时,函数调用还完成了函数中定义的操纵l一样形式l类型 函数名(类型1, 类型2, .);l类型 函数名(类型1 形参1,l 类型2 形参2, .);l举例lint max(int, int);lint max(int x, int y);lvoid dummy();* 无参函数原型 *lvoid dummy(void); * 同上 *l函数表明的形式即函数原型l在函数调用之前,应对函数履行表明l函数表明能够在主调函数的表明部分,也能够在函数外部l函数外部的表明,对全部主调函数都起作用,不需要在主调函数内再次表明l函数的定义也具有表明的作用l库函数的表明包罗在头文件(*.h)里,不需在源程序里
6、表明void main()int max(int x, int y); * 函数表明函数表明 *int a, b, c;c = max(a, b);int max(int x, int y)return xy?x:y;int max(int x, int y); * 函数表明函数表明 *void main()* 不需要再次表明不需要再次表明int max(int, int) *int a, b, c; c = max(a, b);int max(int x, int y)return xy?x:y;int max(int x, int y)* 函数定义具有表明作用函数定义具有表明作用 *ret
7、urn xy?x:y;void main()* 不需要再次表明不需要再次表明int max(int, int) *int a, b, c;c = max(a, b);l调用一个函数的环节中,调用另一函数main函数函数结束结束调用调用a函数函数b函数函数a函数函数调用调用b函数函数l一个函数直截了当或间接的调用它自身l必须有必然的前提推断语句,使得递回调用能够终止f函数函数调用调用f函数函数f1函数函数调用调用f2函数函数f2函数函数调用调用f1函数函数lHanoi塔 (汉诺塔、河内塔、梵塔)l解法lN=1时,Hanoi(1)易解l如果Hanoi(N-1)可解,那么Hanoi(N)易解lSte
8、p1. N-1个盘子,借助3,从1移到2lStep2. 把最大的盘子从1移到3lStep3. N-1个盘子,借助1,从2移到3l复杂度l移动次数:2N-1lN=64,移动次数1.84467E+19l作用域l变量有效的代码空间l变量在作用域才能被引用l变量能够分为局部变量和全局变量l生活期l变量有效的运行时候l变量在生活期内才存在l变量能够分为静态存储和动态存储l局部变量l函数或复合语句内部定义的变量l讲明l作用域为本函数或复合语句范畴l差别函数内的局部变量能够重名,它们是差别的变量,作用域差别,不大概彼此干扰l函数形参也是局部变量的一种l如果多个同名局部变量作用域叠加,那么最内层复合语句中定义
9、的局部变量有效 float foo(int x) int a, i, j; * 局部变量局部变量 * . . * 只能用在只能用在foo内部内部 * void main() int a, b, c; * 局部变量局部变量 * . . * 只能用在只能用在main内部内部 * x,a,i,j作用域作用域a,b,c作用域作用域void main() int a, b, i; . . int c, i; c = a + b; i = a - b; . . . .a,b,i作用域作用域c,i作用域作用域此范畴内复合语句此范畴内复合语句中定义的中定义的i有效有效l全局变量(外部变量)l函数之外定义的变量
10、l讲明l作用域从变量定义处到本源程序文件结束l全局变量能够被本文件的函数所共用l增加函数间传递信息的渠道l如果全局变量与局部变量重名,那么局部变量在作用域内屏蔽全局变量l应限制使用过多全局变量int a=10, b=5, x, y; * 全局变量全局变量 *int max(int x, int y) return xy?x:y;int c; * 全局变量全局变量 *void main() int a=8; c=max(a, b); * 引用局部变量引用局部变量a *全局变量c作用域全局变量a,b,x,y作用域形参x,y作用域局部变量a作用域l动态存储方式l程序运行期间依照需要动态安排存储空间l
11、函数形参、自动变量等l每次调用函数时,给该函数中的局部变量和形参安排存储空间,函数返回后释放空间l静态存储方式l程序运行期间安排固定的存储空间l全局变量全部存放在静态存储区中l自动变量autol寄存器变量registerl静态变量staticl外部变量externlauto变量变量l局部变量局部变量,用用auto关键字修饰关键字修饰lauto能够省略能够省略,是缺省的存储方式是缺省的存储方式l自动安排和释放存储空间自动安排和释放存储空间l举例举例int foo(int x) auto int a, b, c=6; * 定义自动变量定义自动变量a,b,c * float f, g=0.1;* 定
12、义自动变量定义自动变量f,g *lregister变量变量l存放在存放在CPU寄存器中寄存器中,存取速度快存取速度快l寄存器变量只能动态安排存储空间寄存器变量只能动态安排存储空间(寄存寄存器器)l只有自动变量和形参能够做为寄存器变只有自动变量和形参能够做为寄存器变量量l举例举例int foo(int x) register int i;* 定义寄存器变量定义寄存器变量i * for(i=0; i10000; i+). * i用于循环变量用于循环变量 *l静态局部变量l局部变量,用static关键字修饰l静态局部变量为静态存储,整个程序运行期间都不释放,其值不大概丢失l在函数调用结束后,静态局部
13、变量虽仍旧存在,但差不多不在变量的作用域内,所以其他函数不能引用它l静态局部变量在编译时赋初值,且只赋一次l如果不对静态局部变量赋初值,那么初值为0int f(int a) int b=0; static int c=3; b+; c+; return a+b+c;void main() int x=2, i; for(i=0;iy?x:y;void main() extern A, B;* extern表明外部变量表明外部变量 * printf(%d, max(A, B); * 在定义之前使用外部变量在定义之前使用外部变量 *int A=13, B=-8; * 定义外部变量定义外部变量 *
14、file1.c * 表明外部变量表明外部变量 *extern A, B;void main() int c; c=max(A, B); printf(%d, c);* file2.c * 定义外部变量定义外部变量 *int A=13, B=-8;int max(int x, int y) int z; z=xy?x:y; return z;l静态外部变量l限制外部变量只能被本文件引用l静态外部变量不能被其他文件引用l举例* file1.c *static int A;main() . .* file2.c *extern int A;void foo(int n) A = A * n;不能引用
15、静态外部变量Al表明 (Declaration)l对变量的某些属性加以讲明l定义 (Definition)l定义一个新的变量,同时安排存储空间l定义有表明的功能,但表明不必然根基上定义l举例void main() extern A; * 表明而非定义表明而非定义,表明表明A为已定义外部变量为已定义外部变量 * . .int A; * 定义定义A为整型外部变量为整型外部变量 *l局部变量l自动变量(脱离函数,值便消散)l寄存器变量(脱离函数,值便消散)l形式指标(可为自动或寄存器变量)l静态局部变量(脱离函数,值仍保留)l全局变量l静态外部变量(只限本文件引用)l非静态外部变量(许可其他文件引用
16、)l动态存储l自动变量(本函数内有效)l寄存器变量(本函数内有效)l形式指标(本函数内有效)l静态存储l静态局部变量(本函数内有效)l静态外部变量(本文件内有效)l非静态外部变量(其他文件能够引用)l内存动态存储区l自动变量l形式指标l内存静态存储区l静态局部变量l静态外部变量(本文件内有效)l非静态外部变量(其他文件能够引用)lCPU中的寄存器l寄存器变量变量存储类型函数内函数外作用域生活期作用域生活期自动变量形式指标寄存器变量静态局部变量静态外部变量非静态外部变量只限本文件其他文件也能够引用l定义形式lstatic 类型 函数名(形参表)l讲明l内部函数又称静态函数l内部函数只能在所在文件中使用l类似于静态外部变量的作用范畴l举例lstatic int foo(int a, int b);l定义形式lextern 类型 函数名(形参表)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全诚信体系建设-诚信建设教育培训
- 化工印染厂车间卫生细则
- 2026年山西省晋中市单招职业倾向性测试题库带答案详解(模拟题)
- 2026年转子动力学分析与仿真研究
- 2026年广州体育职业技术学院单招职业适应性测试题库附答案详解(b卷)
- 2026年广东省外语艺术职业学院单招职业适应性考试题库附答案详解(研优卷)
- 2026年山西药科职业学院单招职业倾向性考试题库带答案详解(夺分金卷)
- 2026年广东省阳江市单招职业倾向性考试题库附答案详解(精练)
- 儿科安全护理规范课件
- 2026年广东省单招职业适应性考试题库附答案详解(综合卷)
- 小学二年级下册《人与社会》教案
- 第一单元 一方水土一方情跟着课文探民风 整体公开课一等奖创新教学设计
- 租赁合同(2025年写字楼转租)
- (一模)东北三省三校2026年高三第一次联合模拟考试英语试卷(含答案)+听力音频+听力原文
- 2025-2030中国对叔丁基苯甲酸市场竞争格局展望与营销创新发展趋势研究报告
- 设计公司钉钉考勤制度
- 2026年江苏农林职业技术学院单招职业技能考试题库附答案解析
- 2026年上饶职业技术学院单招职业适应性测试题库及答案详解(历年真题)
- 2026石嘴山市能达建设发展有限公司招聘3人考试参考题库及答案解析
- 2026年春季人教版小学数学三年级下册教学计划(含进度表)
- 园林植物主要食叶害虫及防治
评论
0/150
提交评论