C语言课件:第八章函数.ppt

上传人:wuy****n92 文档编号:70107043 上传时间:2023-01-16 格式:PPT 页数:38 大小:478KB
返回 下载 相关 举报
C语言课件:第八章函数.ppt_第1页
第1页 / 共38页
C语言课件:第八章函数.ppt_第2页
第2页 / 共38页
点击查看更多>>
资源描述

《C语言课件:第八章函数.ppt》由会员分享,可在线阅读,更多相关《C语言课件:第八章函数.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第 8 章章 函数函数8.1概述概述8.2函数定义的一般形式函数定义的一般形式8.3函数参数和函数的值函数参数和函数的值8.4函数的调用函数的调用8.5函数的嵌套调用函数的嵌套调用8.6函数的递归调用函数的递归调用8.7数组作为函数参数数组作为函数参数8.9变量的存储类别变量的存储类别8.10内部函数和外部函数内部函数和外部函数8.8局部变量和全局变量局部变量和全局变量1 在进行程序设计时,程序员总是将复杂的问题进行在进行程序设计时,程序员总是将复杂的问题进行分解分解,化整为零。编写一段小程序就能解决一个小问题,化整为零。编写一段小程序就能解决一个小问题,然后将这些小程序拼装起来就能解决非常

2、大而复杂的问然后将这些小程序拼装起来就能解决非常大而复杂的问题。在题。在 C 中,这些小程序统称为函数。中,这些小程序统称为函数。在在 C 中,由系统提供的函数放在函数库中供用户选中,由系统提供的函数放在函数库中供用户选用,以减少重复编写程序模块的工作量。用,以减少重复编写程序模块的工作量。所有函数都是平行的,相互独立不能嵌套,但可以相所有函数都是平行的,相互独立不能嵌套,但可以相 互调用。互调用。C 函数分标准函数函数分标准函数(库函数库函数)和自定义函数。和自定义函数。C 函数本身分有参函数和无参函数。函数本身分有参函数和无参函数。8.1 概述概述第第 8 章章 函数函数28.2 函数定义

3、的一般形式函数定义的一般形式1无参函数的定义形式无参函数的定义形式类型标识符类型标识符 函数名函数名()说明部分说明部分;语句;语句;无参函数一般不需要返回函数值,可以省略类型标识符。无参函数一般不需要返回函数值,可以省略类型标识符。2有参函数的定义形式有参函数的定义形式类型标识符类型标识符 函数名函数名(形式参数表形式参数表)形式参数说明;形式参数说明;说明部分说明部分;语句;语句;3例:例:int max(x,y)int x,y;/形式参数说明形式参数说明 /int z;/函数体中的说明部分函数体中的说明部分 /z=xy?x:y;return(z);类型说明符类型说明符 函数名函数名()“

4、空函数空函数”什么操作也不做。其作用是在此处留一函数的什么操作也不做。其作用是在此处留一函数的位置,以便将来扩充功能之用。函数名也在将来换取实位置,以便将来扩充功能之用。函数名也在将来换取实际的函数名。际的函数名。这两行可以写成一行:这两行可以写成一行:int max(int x,int y)3“空函数空函数”48.3 函数参数和函数的值函数参数和函数的值1形式参数和实际参数形式参数和实际参数例例8.2 从键盘输入两个数,输出其中较大的一个。从键盘输入两个数,输出其中较大的一个。main()int a,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);/a,b为实际参数为

5、实际参数 /printf(“Max is%d”,c);max(x,y)/x,y为形式参数为形式参数 /int x,y;int z;z=xy?x:y;return(z);5注意注意:形参变量在被调用前不占用存储单元;在被调用结束形参变量在被调用前不占用存储单元;在被调用结束 后,形参所占存储单元亦被释放。后,形参所占存储单元亦被释放。实参可以是常量、变量或表达式。实参可以是常量、变量或表达式。必须指定形参类型,且必须与实参的类型一致。必须指定形参类型,且必须与实参的类型一致。实参对形参的数据传递是实参对形参的数据传递是“值传递值传递”。即单向传递,不。即单向传递,不 能逆传。能逆传。可以在形参表

6、中直接说明形参类型。可以在形参表中直接说明形参类型。如:如:int max(int x,int y);float fun(int a10,int n);62函数的返回值函数的返回值 函数的返回值是通过函数的返回值是通过return语句获得的。当不需返语句获得的。当不需返 回函数值时,可省去回函数值时,可省去return语句。语句。return语句的后面可以有括号,也可以没有。语句的后面可以有括号,也可以没有。如如:return z;return(z);return语句的后面可以是变量,也可以是表达式。语句的后面可以是变量,也可以是表达式。如如:return(x y?x:y);return语句返

7、回值的类型应与该函数的类型一致。语句返回值的类型应与该函数的类型一致。否则以函数类型为准。否则以函数类型为准。7 若函数中没有若函数中没有return语句,则该函数被调用后也会带语句,则该函数被调用后也会带 回回不确定的值不确定的值。int a,b,c;a=printstar();b=print_message();c=printstar();printf(“%d,%d,%dn”,a,b,c);输出的输出的a,b,c的值将是各个被处理的字符串的长度。的值将是各个被处理的字符串的长度。为了明确表示不需要函数返回值,可以用为了明确表示不需要函数返回值,可以用“void”定义定义 函数为函数为“无类

8、型无类型”。此时,不得使用。此时,不得使用 a=printstar()之之 类的语句。类的语句。凡不需要返回值的函数,一般均定义为凡不需要返回值的函数,一般均定义为“void”类型。类型。如如:均为处理字符串的函数均为处理字符串的函数且均没有且均没有 return 语句。语句。88.4 函数的调用函数的调用1函数调用的一般形式函数调用的一般形式函数名函数名(实参表实参表)说明说明:对于无参函数,尽管没有对于无参函数,尽管没有“实参表实参表”,但也不得省略,但也不得省略 括号。括号。“实参表实参表”中的参数之间用中的参数之间用逗号逗号分开。分开。实参与形参之间的个数及类型必须一一对应。实参与形参

9、之间的个数及类型必须一一对应。对实参求值的顺序是自左至右还是自右至左对实参求值的顺序是自左至右还是自右至左,视具体视具体 的系统而定。的系统而定。Turbo C 和和 MS C 是按是按自右至左自右至左的顺的顺 序求值。序求值。9例例8.4main()int i=2,p;p=f(i,+i);printf(“%d”,p);int f(a,b);int a,b;int c;if (a b)c=1;else if(a=b)c=0;else c=1;return(c);输出结果输出结果:0注意注意:这里是按这里是按自右至左自右至左求求值的,相当于值的,相当于 fun(3,3)。若。若按按自左至右自左至

10、右求值,则相当于求值,则相当于fun(2,3),则输出为则输出为1。先执行先执行+i 使使 i 的值为的值为3再将再将 i 的值的值 3 传递给传递给 bb 的值为的值为3然后将然后将 i 的值的值 3 传递给传递给 aa 的值为的值为3,102函数调用的方式函数调用的方式调用函数,可以有如下三种方式:调用函数,可以有如下三种方式:将函数调用作为一个语句。将函数调用作为一个语句。如如:printf(“MS C programming”);gets(s);将被调用的函数写在表达式中。将被调用的函数写在表达式中。如如:c=2 max(a,b);注意注意:被调用函数:被调用函数 max 必须有确定的

11、返回值。必须有确定的返回值。将函数调用作为一个函数的实参。将函数调用作为一个函数的实参。如如:m=max(max(a,b),c);3对被调用函数的说明对被调用函数的说明在一个函数中调用另一个函数时:在一个函数中调用另一个函数时:如果被调函数为库函数,则应在文件开头用如果被调函数为库函数,则应在文件开头用“#include”命令命令 声明相应的声明相应的“头文件头文件”。如如:#include“stdio.h”#include“math.h”11 如果被调函数为自定义函数且其定义在主调函数定义之后,则如果被调函数为自定义函数且其定义在主调函数定义之后,则 应在主调函数中说明其类型。应在主调函数中

12、说明其类型。类型标识符类型标识符 被调函数名被调函数名();如如:float add();其语句形式为:其语句形式为:如果被调函数为自定义函数且其定义在主调函数定义之前,则如果被调函数为自定义函数且其定义在主调函数定义之前,则 在主调函数中可不必说明其类型。因为编译程序已知道其类型在主调函数中可不必说明其类型。因为编译程序已知道其类型 如果被调函数的值是整型或字符型,可不必说明类型,系统自如果被调函数的值是整型或字符型,可不必说明类型,系统自 动按整型说明。动按整型说明。如果在所有被调函数定义之前、在文件的开头、在函数的外部如果在所有被调函数定义之前、在文件的开头、在函数的外部 已对被调函数作

13、了类型说明,则在各主调函数中可不必说明其已对被调函数作了类型说明,则在各主调函数中可不必说明其 类型。类型。如如:char letter();float f();int i();main()/主调函数中不必说明它所调用的函数的类型主调函数中不必说明它所调用的函数的类型 /一开始就将所有要被一开始就将所有要被调用的函数作出声明调用的函数作出声明12例:编程求例:编程求11999之间的数之间的数 m,而,而 m、m2 和和 m3 均是回文数。均是回文数。如:如:m=11、m2=121、m3=1331,。#include“stdio.h”main()long int m;for(m=11;m1000

14、;m+)if(fun(m)&fun(m m)&fun(m m m)printf(m=%ld,t m m=%ld,t m m m=%ldn,m,m m,m m m);int fun(long n)long i,m;i=n;m=0;while(i)m=m 10+i%10;i/=10;if(m=n)return 1;else return 0;局部变量局部变量 i 存放存放 n 的值即主的值即主调函数中调函数中 m 传递过来的值传递过来的值,这里的这里的 m 是局部变量是局部变量,不要不要与主函数中的与主函数中的 m 混淆。混淆。138.5 函数的嵌套调用函数的嵌套调用 C 语言函数的定义都是相互平

15、行、独立的语言函数的定义都是相互平行、独立的,不能嵌不能嵌套定义。但可以嵌套调用函数。所谓函数的嵌套调用套定义。但可以嵌套调用函数。所谓函数的嵌套调用就是在被调用的函数中又调用另外的函数。就是在被调用的函数中又调用另外的函数。Main()x=root(x1,x2);/*调用调用root函数函数*/Float root(float y1,float y2)y1=f(x);/*调用调用f 函数函数*/148.6 函数的递归调用函数的递归调用 自己调用自己,递归一次,分配一次存储自己调用自己,递归一次,分配一次存储单元,返回时,一层一层返回;单元,返回时,一层一层返回;2 递归程序示例递归程序示例1

16、 递归的概念递归的概念递归分为:递归分为:直接递归:函数中自己调用自己;直接递归:函数中自己调用自己;间接递归:在调用其他函数中调用自己。间接递归:在调用其他函数中调用自己。15例例8.7 有有5人排成一队,从最后一人开始,其年龄均比人排成一队,从最后一人开始,其年龄均比 前面的人大前面的人大2岁,而最前面的人年龄是岁,而最前面的人年龄是10岁岁,问问 最后一人的年龄是多少岁?最后一人的年龄是多少岁?main()age(5)age(4)+2age(n)n=5age(3)+2age(n)n=4age(2)+2age(n)n=3age(1)+2age(n)n=2age(1)age(n)n=1age

17、(1)=10age(2)=12age(3)=14age(4)=16age(5)=18输出输出age(5)age(n)int n;int c;if(n=1)c=10;else c=age(n1)+2;return(c);main()printf(“%dn”,age(5);运行结果运行结果:1816函数的递归调用利用了堆栈技术。在本例中:函数的递归调用利用了堆栈技术。在本例中:Age(5)Age(51)+2Age(41)+2Age(31)+2Age(21)+210+2=1212+2=1414+2=1616+2=1818Age(21)+2Age(31)+2Age(41)+2Age(51)+2Age(

18、5)Age(5)Age(51)+2Age(41)+2Age(31)+2Age(21)+2入栈入栈出栈出栈出栈结果出栈结果17例:把一非零的整数倒序打印例:把一非零的整数倒序打印main()int aa();int n;scanf(“%d”,&n);aa(n);int aa(x)int x;printf(“%d”,x%10);if(x/10!=0)aa(x/10);18例:读入一串字符,并倒序打印例:读入一串字符,并倒序打印main()char abc();abc();char abc()char ch;scanf(“%c”,&ch);if(ch!=.)abc();printf(“%c”,ch)

19、;19例:求两个数的最大公约数例:求两个数的最大公约数main()int gcd(a,b);int n,m;scanf(“%d%d”,&m,&n);printf(“GCD=%d”,gcd(m,n);int gcd(int a,int b)int c,g;c=a%b;if(c=0)g=b;else g=gcd(b,c);return(g);208.7 数组作为函数参数数组作为函数参数1数组元素作函数实参数组元素作函数实参 用法与变量参数相同,是单向传递,即用法与变量参数相同,是单向传递,即“值传递值传递”方式。方式。例:例:main()y=fun(a0,a1.a2);float fun(floa

20、t a,float b,float c)float sum,aver;sum=a+b+c;aver=sum/3.0;return(aver);218.7 数组作为函数参数数组作为函数参数2数组名作函数实参数组名作函数实参 此时,实参数组名和形参数组名都应此时,实参数组名和形参数组名都应分别在各自所在的函数中定义;采取分别在各自所在的函数中定义;采取“地址地址传送传送”方式,即:把实参数组的起始地址传方式,即:把实参数组的起始地址传给形参数组,这样,实参数组和形参数组共给形参数组,这样,实参数组和形参数组共占同一段内存单元。占同一段内存单元。22例:例:main()float fun1(floa

21、t x3);float a3=80.0,90.0,100.0;float ave;ave=fun1(a);printf(“%fn”,ave);float fun1(float x3)float sum,aver;sum=x0+x1+x2;aver=sum/3.0;return(aver);Float fun1();Float fun1(x)float x;或或 float x3;23例:例:用函数调用实现字符串的复制。用函数调用实现字符串的复制。void copy_string(from,to)char from,to;int i=0;while(from i !=0)to i =from i

22、 ;i+;to i =0;main()char a =“I am a teacher.”;char b =“you are a student.”;copy_string(a,b);printf(“string_a=%snstring_b=%sn”,a,b);声明形参声明形参from,to为字符数组为字符数组实参以数组名将数组实参以数组名将数组 a,b 的起的起始地址传递给形参始地址传递给形参 from 和和 to运行结果:运行结果:string_a=I am a teacher.string_b=I am a teacher.248.8 局部变量和全局变量局部变量和全局变量1局部变量局部变量

23、 在一个函数内部定义的变量,只能在本函数内使用和有在一个函数内部定义的变量,只能在本函数内使用和有效,称为效,称为“局部变量局部变量”。主函数主函数main中定义的变量中定义的变量,也只能在主函数内使用和有效。也只能在主函数内使用和有效。不同函数中可以使用相同名字的变量,且互不干扰。不同函数中可以使用相同名字的变量,且互不干扰。形式参数也是局部变量形式参数也是局部变量,也只能在所在函数内使用和有效。也只能在所在函数内使用和有效。可以在一个函数内的复合语句中定义变量可以在一个函数内的复合语句中定义变量,且这些变量只且这些变量只 在本复合语句中有效。在本复合语句中有效。这种复合语句也称为这种复合语

24、句也称为“分程序分程序”或或“子模块子模块”。2全局变量全局变量 在函数在函数(包括包括main函数函数)外定义的变量为外部变量,称为外定义的变量为外部变量,称为“全局变量全局变量”。全局变量的有效范围为从定义变量的位置开始。全局变量的有效范围为从定义变量的位置开始到本源文件结束。到本源文件结束。25 全局变量增加了函数间数据联系的渠道。由于同一文件中的所全局变量增加了函数间数据联系的渠道。由于同一文件中的所 有函数都能引用全局变量的值,当需要从一个函数中带回多个有函数都能引用全局变量的值,当需要从一个函数中带回多个 值时,就能克服函数调用只能返回一个值的局限性。值时,就能克服函数调用只能返回

25、一个值的局限性。如无必要,不要使用全局变量。因为全局变量既降低程序的清如无必要,不要使用全局变量。因为全局变量既降低程序的清 晰性和函数的通用性晰性和函数的通用性,且又在程序的全部执行过程中都占用存且又在程序的全部执行过程中都占用存 储空间。储空间。在文件开头定义的外部变量才可在整个文件范围内使用,若在在文件开头定义的外部变量才可在整个文件范围内使用,若在 定义点之前的函数需引用外部变量,则可用关键字定义点之前的函数需引用外部变量,则可用关键字“extern”作作 “外部变量说明外部变量说明”。注意注意:外部变量定义和外部变量说明并不是同一回事。外部变量外部变量定义和外部变量说明并不是同一回事

26、。外部变量的定义只能有一次的定义只能有一次,它的位置在所有函数之外。而同一程序中的外它的位置在所有函数之外。而同一程序中的外部变量说明可以有多次,它的位置在函数之内部变量说明可以有多次,它的位置在函数之内(哪个函数要用就在哪个函数要用就在哪个函数中说明哪个函数中说明)。系统根据外部变量的定义。系统根据外部变量的定义(而不是根据外部变量而不是根据外部变量的说明的说明)分配存储单元。对外部变量的初始化只能在分配存储单元。对外部变量的初始化只能在“定义定义”时进行时进行,“extern”只是申明该变量是一个已在外部定义过的变量而已只是申明该变量是一个已在外部定义过的变量而已。如果在同一源文件中,外部

27、变量与局部变量同名,则在局部变如果在同一源文件中,外部变量与局部变量同名,则在局部变 量的作用范围内,外部变量不起作用。量的作用范围内,外部变量不起作用。26例:例:#include“stdio.h”main()int a=1,b=2,c=3;a+;c+=b;int b=4,c;c=2 b;a+=c;printf(“%d,%d,%dn”,a,b,c);printf(“%d,%d,%dn”,a,b,c);输出结果输出结果:10,4,810,2,5a 为全局变量为全局变量,b,c为局部变量为局部变量a,b,c均为全局变量均为全局变量278.9 变量的存储类别变量的存储类别1动态存储方式与静态存储方

28、式动态存储方式与静态存储方式v 静态变量在程序的运行期间占用固定的存储空间,静态变量在程序的运行期间占用固定的存储空间,直到程序的终止而释放;直到程序的终止而释放;v 动态变量是在程序的运行期间随着函数的调用随时动态变量是在程序的运行期间随着函数的调用随时动态地占用和释放存储空间。动态地占用和释放存储空间。v 存储方式是根据变量的存储类别决定的。存储方式是根据变量的存储类别决定的。C的存储类别有四种的存储类别有四种:自动的自动的(auto)静态的静态的(static)、寄存器的寄存器的(register)外部的外部的(extern)。288.9 变量的存储类别变量的存储类别1)自动变量()自动

29、变量(auto)自动变量是局部变量自动变量是局部变量2局部变量的存储方式局部变量的存储方式 函数中的局部变量若未专门说明,都是由编译系统自函数中的局部变量若未专门说明,都是由编译系统自 动动态分配存储空间,这类局部变量称为自动变量,动动态分配存储空间,这类局部变量称为自动变量,其类型说明前其类型说明前不论是否有关键字不论是否有关键字“auto”,都属于动态都属于动态 存储类别。存储类别。自动变量赋值之前,值不确定自动变量赋值之前,值不确定对同一函数的两次调用之间,自动变量的值不保留对同一函数的两次调用之间,自动变量的值不保留定义式:定义式:auto数据类型数据类型 变量名变量名=初值表达式初值

30、表达式1,298.9 变量的存储类别变量的存储类别2)静态变量()静态变量(static):局部变量):局部变量2局部变量的存储方式局部变量的存储方式v静态变量的存储空间在程序静态变量的存储空间在程序 的整个运行期间时固定的整个运行期间时固定定义式:定义式:static 数据类型数据类型 变量名表变量名表v若希望被调函数在结束后,其局部变量占用的存若希望被调函数在结束后,其局部变量占用的存储空间不释放储空间不释放,以便保留其变量的值,用于下次调以便保留其变量的值,用于下次调用该函数,则用用该函数,则用“static”说明为说明为“局部静态变局部静态变量量”。v静态变量的初始化是在编译时进行的。

31、静态变量的初始化是在编译时进行的。30 局部静态变量在静态存储区分配存储单元,在程序的整个运行局部静态变量在静态存储区分配存储单元,在程序的整个运行 期间都不释放。而动态变量在动态存储区分配存储单元,函数期间都不释放。而动态变量在动态存储区分配存储单元,函数 调用结束后即释放。调用结束后即释放。局部静态变量在编译时只赋初值一次,以后每次被调用时不再局部静态变量在编译时只赋初值一次,以后每次被调用时不再 重新赋值而只保留前次被调用结束时的值。动态变量赋初值不重新赋值而只保留前次被调用结束时的值。动态变量赋初值不 是在编译时而是在函数被调用时进行的,函数每次被调用时重是在编译时而是在函数被调用时进

32、行的,函数每次被调用时重 新赋值,相当于赋值语句。新赋值,相当于赋值语句。静态变量若未赋初值,则在编译时自动赋初值静态变量若未赋初值,则在编译时自动赋初值0(数值型数值型)或或空字空字 符符(字符型字符型)。而动态变量若未赋初值,则其值是不确定的。而动态变量若未赋初值,则其值是不确定的。只有将数组定义为全局变量或静态变量时才能赋初值。但应注只有将数组定义为全局变量或静态变量时才能赋初值。但应注 意,如果数组的值在函数被调用过程中改变了,则影响下一次意,如果数组的值在函数被调用过程中改变了,则影响下一次 调用时的初值。调用时的初值。虽然局部静态变量在函数被调用结束后其值仍然存在,但其它虽然局部静

33、态变量在函数被调用结束后其值仍然存在,但其它 函数是不能引用的。函数是不能引用的。318.9 变量的存储类别变量的存储类别3)寄存器变量()寄存器变量(register):局部变量):局部变量注意:注意:只有局部自动变量和形式参数可作为只有局部自动变量和形式参数可作为 是寄存器变量;静态变量和全局变量是寄存器变量;静态变量和全局变量 均不行。均不行。2局部变量的存储方式局部变量的存储方式特点:特点:速度快,一般把使用频率较高的变量速度快,一般把使用频率较高的变量 定义为寄存器变量。定义为寄存器变量。定义式:定义式:register 数据类型数据类型 变量名表变量名表32例例8.18 打印打印

34、1 到到 5 的阶乘值。的阶乘值。int fac(n)int n;static int f=1;f=f n;return(f);main()int i;for(i=1;i=5;i+)printf(“%d!=%dn”,i,fac(i);f 被定义为静态变量被定义为静态变量,“f=1;”的初始在的初始在fac(n)第一次被调用时进行。随后无论第一次被调用时进行。随后无论fac(n)函数被调用多少次也不会再进行函数被调用多少次也不会再进行初始化初始化,且且 f 被修改的值一直保留至本源被修改的值一直保留至本源程序运行结束为止程序运行结束为止,在本函数外不可使用在本函数外不可使用f 的初值的初值112

35、624调用次序调用次序123453全局变量的存储方式全局变量的存储方式 在文件开头用在文件开头用extern作说明,可以引用另一个文件作说明,可以引用另一个文件中定义的全局变量。但用中定义的全局变量。但用static说明的全局变量不能被说明的全局变量不能被其它文件引用。其它文件引用。33int m=1,n=4;float f1(a)int a;int b,c;char ch1,ch2;char f2(x,y)int x,y;int k,j;main()extern int p,q;例:例:外部变量外部变量定义函数定义函数f1全局变量全局变量定义函数定义函数f2外部变量外部变量34全局变量的作用

36、范围:全局变量的作用范围:在在文件开头定义的外部变量,在整个文件中文件开头定义的外部变量,在整个文件中均可以引用;均可以引用;不在文件开头定义的外部变量,从定义点到不在文件开头定义的外部变量,从定义点到文件结束。文件结束。设置全局变量的作用:设置全局变量的作用:增强函数间的联系渠道;增强函数间的联系渠道;使用全局变量可以减少函数实参和形参的个数使用全局变量可以减少函数实参和形参的个数一个源文件中,外部变量与局部变量重名时,一个源文件中,外部变量与局部变量重名时,则全局变量应扣除去局部变量所在的函数范围。则全局变量应扣除去局部变量所在的函数范围。全局变量的使用降低了程序的通用性,一般建全局变量的

37、使用降低了程序的通用性,一般建议不必要时不用全局变量。议不必要时不用全局变量。35int m=1,n=4;float f1(a)int a;int b,c;char ch1,ch2;char f2(x,y)int x,y;int k,j;main()extern int p,q;例:例:可使用可使用m和和n和两个和两个全局变量;全局变量;a、b和和c三三个局部变个局部变量量可使用可使用m、n、p、q、ch1和和ch2六个全局变六个全局变量量可使用可使用m、n、p和和q四个全局四个全局变量;变量;x、y、k和和j四四个局部变个局部变量量36File1.cInt a;Main()File2.cex

38、tern int a;func(n)int n a=a*n;虽虽然然在在file2.c 对对“a”用用extern 说说明明了了,但但也也不不能能引引用用file1.c中中的的“a”,还还需需在在extern int a;之之前前加加上上:#include“file1.c”或或 在在 file1.c中中 的的 int a;之之 前前 加加 上上:#include“file2.c”378.10 内部函数和外部函数内部函数和外部函数 就函数的本质而言都是全局的。但根据其是否能被就函数的本质而言都是全局的。但根据其是否能被其它文件所调用,将它们区分为内部函数和外部函数。其它文件所调用,将它们区分为内

39、部函数和外部函数。1内部函数内部函数如果一个函数只能被本文件的其它函数所调用,则将它如果一个函数只能被本文件的其它函数所调用,则将它称为内部函数。可以用称为内部函数。可以用“static”将函数定义为内部函数。将函数定义为内部函数。如如:static int fun(a,b);同静态变量一样,内部函数只局限于本文件内使用同静态变量一样,内部函数只局限于本文件内使用,因而不会和其它文件中的同名函数发生冲突。因而不会和其它文件中的同名函数发生冲突。2外部函数外部函数 在定义函数时,如果在其类型说明前冠以在定义函数时,如果在其类型说明前冠以extern,则表示此函数为外部函数。则表示此函数为外部函数。如如:extern int fun(a,b);外部函数可以被其它文件所使用。如果省略外部函数可以被其它文件所使用。如果省略extern,则隐含该函数为外部函数。则隐含该函数为外部函数。38

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁