第五章函数C语言_第1页
第五章函数C语言_第2页
第五章函数C语言_第3页
第五章函数C语言_第4页
第五章函数C语言_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C C 程程 序序 设设 计计一个程序应当是轻盈的、灵活的,它的子程一个程序应当是轻盈的、灵活的,它的子程序就像一串珍珠一样连接着。它的精神和意序就像一串珍珠一样连接着。它的精神和意图应该贯穿始终。在程序中,内容既不应太图应该贯穿始终。在程序中,内容既不应太多,也不应太少;既不应该有不需要的循环多,也不应太少;既不应该有不需要的循环结构,也不该有冗余的变量;既不缺乏结构结构,也不该有冗余的变量;既不缺乏结构性,又不过分僵化。性,又不过分僵化。 - Geoffrey James- Geoffrey James的的编程之道编程之道 模块化程序设计模块化程序设计第第5章章 函数函数E5.1 函数的定

2、义函数的定义 5.2 函数的调用函数的调用 5.3 函数的声明函数的声明 5.4 函数参数的传值函数参数的传值 5.5 嵌套调用和嵌套调用和递归调用递归调用 5.6 变量的使用范围和存储类别变量的使用范围和存储类别一个一个C C程序可由一个主函数和若干个其他程序可由一个主函数和若干个其他函数(子函数)构成。函数(子函数)构成。由主函数调用其他由主函数调用其他函数函数, , 其他函数也可以互相调用其他函数也可以互相调用, , 但不能但不能调用主函数。调用主函数。函数分类函数分类从用户角度从用户角度 标准函数(库函数):由系统提供标准函数(库函数):由系统提供 用户自定义函数用户自定义函数从函数形

3、式从函数形式无参函数无参函数 有参函数有参函数函数原型函数原型int abs(int _X)1、函数功能、函数功能求绝对值求绝对值2、函数参数的数目、类型、顺序、函数参数的数目、类型、顺序、意义意义1个个int类型的参数,表示对此参数类型的参数,表示对此参数求绝对值求绝对值3、函数返回值类型、意义、函数返回值类型、意义int类型的返回值,表示取绝对值类型的返回值,表示取绝对值之后的结果之后的结果4、使用时所需要包含的头文件、使用时所需要包含的头文件math.h有一道数学题目:有三个未知数有一道数学题目:有三个未知数a,b,c,其中其中c = f(a,b) = a+b; 函数定义的一般形式函数定

4、义的一般形式函数类型,即:函数值(或者称函数类型,即:函数值(或者称为函数的因变量)的类型。为函数的因变量)的类型。缺省表示缺省表示int型型,无返回值无返回值void函数类型函数类型 函数名函数名(类型类型1 形式参数形式参数1, 类型类型2 形式参数形式参数2,.)说明部分说明部分语句部分语句部分函数首部或函数头函数首部或函数头函数体函数体int f(int a, int b)int s; s = a + b; return s;用合法标识符命名,用合法标识符命名,最好见名知意最好见名知意简称形参,指函数中的自变量,是从函数外部向函数简称形参,指函数中的自变量,是从函数外部向函数内部运送值

5、的数据通道。可根据需要有内部运送值的数据通道。可根据需要有0 0到多个。定义到多个。定义时每个形参都应指出各自的类型。时每个形参都应指出各自的类型。 变量说明部分主要是定义运算所需要的变量。因为这变量说明部分主要是定义运算所需要的变量。因为这些变量在函数内部定义,又称为局部变量。只在函数些变量在函数内部定义,又称为局部变量。只在函数内部使用有效,不能在函数外部使用。内部使用有效,不能在函数外部使用。语句部分主要是利用已定义的变量进行运算,得到结果。语句部分主要是利用已定义的变量进行运算,得到结果。函数最终需要得到一个结果时,末尾会写函数最终需要得到一个结果时,末尾会写return return

6、 语句。语句。否则可以不写返回语句,此时函数类型应写为否则可以不写返回语句,此时函数类型应写为voidvoid。returnreturn是从函数内部向外部传送值的数据通道是从函数内部向外部传送值的数据通道1. 1. 一个函数中可有多个一个函数中可有多个returnreturn语句。语句。2. return2. return语句后面可以是变量、常量、表达式,可以用小语句后面可以是变量、常量、表达式,可以用小括号将它括起来。括号将它括起来。3. 3. 若无若无returnreturn语句,遇语句,遇“”时,程序自动返回调用函数时,程序自动返回调用函数4. 4. 函数类型最好与函数类型最好与retu

7、rnreturn语句返回的值类型保持一致。若语句返回的值类型保持一致。若不一致,函数结果以函数类型为准,由不一致,函数结果以函数类型为准,由C C编译系统自动完成编译系统自动完成类型转换。类型转换。【例例5.1】用用C程序函数实现数学函数程序函数实现数学函数f的功能。的功能。 将数学函数将数学函数f (a , b)对应写为对应写为C程序函数:程序函数:int f(int a, int b) /*定义函数定义函数f, 形式参数形式参数a,b为整型为整型*/ /*函数函数f的开始的开始*/ int s; /*声明部分声明部分,定义本函数中用到的变量定义本函数中用到的变量s*/s = a + b;

8、/*语句部分,运算求和结果放入语句部分,运算求和结果放入s中中*/ return s; /*将将s的值返回给函数的值返回给函数f,即,即: f(a,b) = s; */ /*函数函数f的结束的结束找找我是否有错?找找我是否有错?int f(int a, b) int s; s = a + b; return s;int f(int a, int b) int s; s = a + b; return s;error找找我是否有错?找找我是否有错?int f(int a, int b); int s; s = a + b; return s;int f(int a, int b) int s;

9、s = a + b; return s;error找找我是否有错?找找我是否有错?int f(int a, int b) int s; s = a + b; returns;int f(int a, int b) int s; s = a + b; return s;error找找我是否有错?找找我是否有错?int f(int a, int b) int s; s = a + b; return(s);int f(int a, int b) return a+b;rightright找找我是否有错?找找我是否有错?int f(float a, float b) float s; s = a +

10、 b; return s;warning找找我是否有错?找找我是否有错?int f(int a, int b) if(ab) return a;else return b;right良好的习惯:加上函数注释良好的习惯:加上函数注释/ /* * 函数功能:实现函数功能:实现功能功能 函数参数:参数函数参数:参数1, 1, 表示表示 参数参数2, 2, 表示表示 函数返回值:函数返回值: * */ /返回值类型返回值类型 函数名函数名( (类型类型1 形式参数形式参数1, 类型类型2 形式参数形式参数2,.) ) 说明部分说明部分 语句部分语句部分 第第5章章 函数函数 5.1 函数的定义函数的定

11、义E5.2 函数的调用函数的调用 5.3 函数的声明函数的声明 5.4 函数参数的传值函数参数的传值 5.5 嵌套调用和嵌套调用和递归调用递归调用 5.6 变量的使用范围和存储类别变量的使用范围和存储类别函数定义完毕,需要使用一下,验证函数定义是否函数定义完毕,需要使用一下,验证函数定义是否正确。正确。使用数学函数使用数学函数f的过程示例:假设有的过程示例:假设有a=3; b = 5; 将将a和和b的值代入函数的值代入函数f,求得:,求得: c = f(a, b) = f(3,5) = 3 + 5 = 8。使用使用C程序的函数,称为函数调用。程序的函数,称为函数调用。函数调用的格式为:函数调用

12、的格式为:函数名函数名(实际参数实际参数1, 实际参数实际参数2,. ); 实际参数简称实参,可以是常量、变量、表达式,实际参数简称实参,可以是常量、变量、表达式,实参的个数、类型应该跟形参一一对应匹配。实参实参的个数、类型应该跟形参一一对应匹配。实参主要用于给形参一一对应传送数据。主要用于给形参一一对应传送数据。f(3,5) 就是函数就是函数调用,其中调用,其中3和和5就是函数的两个整型实参,它们用就是函数的两个整型实参,它们用于给于给a,b赋值。赋值。在主函数中使用在主函数中使用f函数:函数:int main( ) /* 主函数主函数*/ int c; /* 定义存放结果的变量定义存放结果

13、的变量*/ c = f (3, 5); /*调用函数调用函数f, 将得到的值赋给将得到的值赋给c*/ printf (“c = %dn”,c); /*输出输出c的值的值 */ return 0;标记了执行顺序的完整程序如下:标记了执行顺序的完整程序如下:#include int f(int a, int b) /* 定义函数定义函数f */ int s; s = a + b; return s; int main( ) /* 定义主函数定义主函数 */ int c; c = f(3,5); /* 调用函数调用函数f */printf (c = %dn,c); return 0;56789101

14、234121314给形参分配内存给形参分配内存实参传值给形参实参传值给形参11将结果传回给函数将结果传回给函数f(3,5) = s;撤销形参的内存撤销形参的内存使用函数调用的形式使用函数调用的形式(1)函数调用作为一条语句;)函数调用作为一条语句;(2)函数有明确的返回值时,函数调用可以当)函数有明确的返回值时,函数调用可以当做普通变量使用,作为表达式的一部分。做普通变量使用,作为表达式的一部分。(3)函数有明确的返回值时,函数调用可以作)函数有明确的返回值时,函数调用可以作为其他函数的实参。为其他函数的实参。【例例5.2】编写函数实现打印以下图形的功能。编写函数实现打印以下图形的功能。若函数

15、不需要从外界获取值,可以不写参数。函数若函数不需要从外界获取值,可以不写参数。函数本身不需要一个计算结果,将函数类型设为本身不需要一个计算结果,将函数类型设为voidvoid类类型,函数结尾不需要写型,函数结尾不需要写returnreturn语句。语句。调用这类函数时,直接将调用加上分号,作为调用这类函数时,直接将调用加上分号,作为一条语句。若将其作为表达式的一部分,例如:一条语句。若将其作为表达式的一部分,例如:int a = printStar( ); int a = printStar( ); 程序出错。程序出错。修改函数,将其功能扩展为可输出修改函数,将其功能扩展为可输出n行此图形行此

16、图形用这种格式,可以吗?用这种格式,可以吗?实参和形参个数不一致,严格的编译实参和形参个数不一致,严格的编译器会报错,器会报错,VC6.0VC6.0可以执行,但无输可以执行,但无输出结果。出结果。也正确,但不通用,每次需要输出不也正确,但不通用,每次需要输出不同行的图形时都要修改函数。同行的图形时都要修改函数。【例例5.3】定义定义pow函数,实现求函数,实现求xy的功能。只考虑的功能。只考虑x和和y均为正整数的情况。均为正整数的情况。 调用函数调用函数powpow作为了作为了printfprintf函函数中用于输出的第数中用于输出的第3 3个参数。个参数。可以去掉参数吗?可以去掉参数吗?若需

17、要计算用户从键盘输入的若需要计算用户从键盘输入的x和和y的幂次方,的幂次方,如何修改程序?如何修改程序?将变量将变量a a和和b b作为实参,它们的值作为实参,它们的值由用户从键盘输入由用户从键盘输入注意:不要写成注意:不要写成 pow(int a, int b)【例例5.4】定义定义bigger函数,实现求两个整数中较大函数,实现求两个整数中较大值的功能。利用此函数求三个整数中的较大值。值的功能。利用此函数求三个整数中的较大值。 函数调用时,形参若是变量,只写变量名,不写变函数调用时,形参若是变量,只写变量名,不写变量的类型。例如:将量的类型。例如:将bigger(x,y)写为写为bigge

18、r(int x, int y)是错误的。实参是错误的。实参x和和y在函数在函数调用前已经有定义了,不能在此处再定义。调用前已经有定义了,不能在此处再定义。bigger(bigger(x,y),z)作为了赋值表达式作为了赋值表达式max = bigger(bigger(x,y),z)的一部分,即:函数调用可以的一部分,即:函数调用可以作为表达式的一部分。作为表达式的一部分。第第5章章 函数函数 5.1 函数的定义函数的定义 5.2 函数的调用函数的调用E5.3 函数的声明函数的声明 5.4 函数参数的传值函数参数的传值 5.5 嵌套调用和嵌套调用和递归调用递归调用 5.6 变量的使用范围和存储类

19、别变量的使用范围和存储类别将例题将例题5-1程序中自定义函数程序中自定义函数f和和main函数的位置互函数的位置互换,执行程序,观察实验结果。换,执行程序,观察实验结果。 在程序运行前的编译阶段,要进行语法检错。程序编译的顺序在程序运行前的编译阶段,要进行语法检错。程序编译的顺序是按照代码书写的先后顺序来顺次编译的。当编译到函数调用是按照代码书写的先后顺序来顺次编译的。当编译到函数调用语句时,由于还未编译到函数定义的部分,因此语句时,由于还未编译到函数定义的部分,因此C编译系统不编译系统不知道后面是否有此函数的定义,也不知道此函数调用格式是否知道后面是否有此函数的定义,也不知道此函数调用格式是

20、否正确,所以正确,所以C编译系统会提示找不到函数。为了解决这个问题,编译系统会提示找不到函数。为了解决这个问题,可以在函数调用前面加上函数声明。可以在函数调用前面加上函数声明。函数声明:函数的使用说明书函数声明:函数的使用说明书函数声明由函数首部加上分号组成。函数声明由函数首部加上分号组成。例如:例如:函数函数f的函数声明为:的函数声明为:int f(int a, int b); 也可以将参数名省略:也可以将参数名省略:int f(int , int); 。说明:说明:(1)加上形参名的格式更清楚些。)加上形参名的格式更清楚些。(2)若函数定义在函数调用前面,则不需要添加函数)若函数定义在函数

21、调用前面,则不需要添加函数声明。声明。【例例5.5】函数声明的使用。函数声明的使用。第第5章章 函数函数 5.1 函数的定义函数的定义 5.2 函数的调用函数的调用 5.3 函数的声明函数的声明E5.4 函数参数的传值函数参数的传值 5.5 嵌套调用和嵌套调用和递归调用递归调用 5.6 变量的使用范围和存储类别变量的使用范围和存储类别一、单向值传递一、单向值传递【例例5.6】写一个函数实现两个整数的交换,测试写一个函数实现两个整数的交换,测试 main swap05xyab50c050当基本类型的常量或变量作函数的实参时,形参当基本类型的常量或变量作函数的实参时,形参与实参占用不同的内存空间(

22、可同名)。从实参与实参占用不同的内存空间(可同名)。从实参到形参的数据传递是单向的。即:形参值的改变到形参的数据传递是单向的。即:形参值的改变不会影响到实参,这称为不会影响到实参,这称为“单向值传递单向值传递”。 二、双向地址传递二、双向地址传递当地址常量或地址变量(例如:数组名)作当地址常量或地址变量(例如:数组名)作函数的实参时,从实参到形参传递的是地函数的实参时,从实参到形参传递的是地址,形参与实参使用相同的内存空间。形参址,形参与实参使用相同的内存空间。形参值的改变会影响到实参,这种传递也称为值的改变会影响到实参,这种传递也称为“双双向地址传递向地址传递”。例例 如:如:void Bu

23、bbleSort( int a10) / 对数组对数组a的元素按冒泡法排序的元素按冒泡法排序int main( ) int b10 = 7,1,4,2,9,0,8,5,-3,2; BubbleSort(b); / b是数组名,进行地址传递是数组名,进行地址传递形参形参a a不另外分配内存,它就使用不另外分配内存,它就使用b b数组的内存,数组的内存,可将可将a a,b b看成同一个数组,对看成同一个数组,对a a排序,即是对排序,即是对b b排序,所以调用函数排序,所以调用函数BubbleSortBubbleSort后,数组后,数组b b内的内的元素已排好序。还可写为:元素已排好序。还可写为:

24、void BubbleSort( int a ) 【例例5.7】有一个已按由小到大的顺序排列的有一个已按由小到大的顺序排列的整型数组,从键盘输入一个整数,按照数组整型数组,从键盘输入一个整数,按照数组原来的排列规律将此数插入到数组中。写一原来的排列规律将此数插入到数组中。写一个函数个函数insertNumber实现此功能,并测试。实现此功能,并测试。思思 路:路:1. 若若num大于或者等于大于或者等于a8,例如:,例如:num 是是 99,那么直接将,那么直接将num存入存入arr9中即可。中即可。2. 否则,例如:否则,例如:num是是20,先查找,先查找num应应该放在数组中哪个位置。再

25、将此位置及后面该放在数组中哪个位置。再将此位置及后面的数据依次后移,最后将的数据依次后移,最后将num存入此位置中。存入此位置中。 查找位置:查找位置: 在将在将num放入放入a3之前,先将之前,先将a8、a7、. 、a4、a3依次后移。依次后移。 将将num赋值给赋值给a3。 第第5章章 函数函数 5.1 函数的定义函数的定义 5.2 函数的调用函数的调用 5.3 函数的声明函数的声明 5.4 函数参数的传值函数参数的传值E5.5 嵌套调用和嵌套调用和递归调用递归调用 5.6 变量的使用范围和存储类别变量的使用范围和存储类别一、嵌套调用一、嵌套调用 一个函数调用另一个函数,另一个函数又调一个

26、函数调用另一个函数,另一个函数又调用其他函数,称为函数的嵌套调用。用其他函数,称为函数的嵌套调用。C规定规定函函数定义不可嵌套,但可以嵌套调用函数。数定义不可嵌套,但可以嵌套调用函数。【例例5.8】编写程序计算编写程序计算 s=1!+2!+3!+.+n!调用调用调用调用嵌套调用嵌套调用二、递归调用二、递归调用一个函数直接调用自己本身或者通过调用其一个函数直接调用自己本身或者通过调用其他函数来间接地调用自己,称为递归函数。他函数来间接地调用自己,称为递归函数。【例例5.9】递归问题:有递归问题:有5个人坐在一起,问第个人坐在一起,问第5个人个人多少岁?他说比第多少岁?他说比第4个人大个人大5岁。

27、问第岁。问第4个人岁数,个人岁数,他说比第他说比第3个人大个人大5岁。问第岁。问第3个人,又说比第个人,又说比第2个人个人大大5岁。问第岁。问第2个人,说比第个人,说比第1个人大个人大5岁。最后问第岁。最后问第1个人,他说他个人,他说他10岁。请问第岁。请问第5个人多大?个人多大?根据题目中给出的年龄关系,列出计算第根据题目中给出的年龄关系,列出计算第n个人年个人年龄的数学公式:龄的数学公式:根据数学公式,写出对应的根据数学公式,写出对应的C函数如下:函数如下:int age(int n) if (n = 1) /* 递归结束条件成立,结束递归递归结束条件成立,结束递归 */return 10

28、; else /* 递归结束条件不成立,继续进行递归调用递归结束条件不成立,继续进行递归调用 */return age( n - 1)+5; 或者:或者:int age(int n) if (n 1) /* 递归结束条件不成立,继续进行递归调用递归结束条件不成立,继续进行递归调用 */ return age( n - 1)+5; else /* 递归结束条件成立,结束递归调用递归结束条件成立,结束递归调用 */ return 10; 年龄的递归运算过程年龄的递归运算过程【例例5.10】用递归调用求用递归调用求n的阶乘。的阶乘。第第5章章 函数函数 5.1 函数的定义函数的定义 5.2 函数的调

29、用函数的调用 5.3 函数的声明函数的声明 5.4 函数参数的传值函数参数的传值 5.5 嵌套调用和嵌套调用和递归调用递归调用E 5.6 变量的使用范围和存储类别变量的使用范围和存储类别一、局部变量与全局变量一、局部变量与全局变量 局部变量(也称为内部变量):局部变量(也称为内部变量):在函数内部定义,在函数内部定义,有效使用范围是从定义处开始,到本函数结束为止。有效使用范围是从定义处开始,到本函数结束为止。全局变量(也称为外部变量)全局变量(也称为外部变量):在函数外部定义,不:在函数外部定义,不作特殊声明的情况下,有效使用范围是从定义处开作特殊声明的情况下,有效使用范围是从定义处开始,到所

30、在源文件末尾为止。始,到所在源文件末尾为止。例例 如:如:两个两个n不是同一个不是同一个变量,可以同名变量,可以同名【例例5.11】局部变量的有效区域。局部变量的有效区域。局部变量局部变量a和和b的有效范围的有效范围超出此范围使超出此范围使用它们会出错用它们会出错【例例5.12】全局变量的有效区域。全局变量的有效区域。全局变量全局变量a和和b定定义函数外部,有义函数外部,有效范围从定义处效范围从定义处开始,到所在源开始,到所在源文件结束为止。文件结束为止。 【例例5.13】不同函数中的同名局部变量。不同函数中的同名局部变量。fun中中a和和b的的有效范围有效范围 main中中a和和b的有效范围

31、的有效范围 【例例5.14】局部变量和全局变量同名。局部变量和全局变量同名。局部变量局部变量a和和b的有的有效范围效范围 全部变量全部变量a和和b的有的有效范围效范围 二、变量的存储类别二、变量的存储类别 一个变量完整的定义中除了变量的数据类型之外,一个变量完整的定义中除了变量的数据类型之外,还应加上存储类型的限制。格式如下:还应加上存储类型的限制。格式如下: 存储类型存储类型 数据类型数据类型 变量名变量名;C语言中,变量的存储类型可以分为四类:语言中,变量的存储类型可以分为四类:auto(自动型)、(自动型)、static(静态型)、(静态型)、register(寄存器(寄存器型)、型)、

32、extern(外部型)。(外部型)。不同类型的变量的生命周期(指的是在程序运行过不同类型的变量的生命周期(指的是在程序运行过程中,变量从创建到撤销的一段时间)不同。程中,变量从创建到撤销的一段时间)不同。1、auto类型的局部变量类型的局部变量函数形参和局部变量函数形参和局部变量,不加任何修饰时,默,不加任何修饰时,默认为认为auto类型的局部变量。这类变量类型的局部变量。这类变量生命周生命周期与其所在的函数期与其所在的函数代码块代码块共存亡共存亡。即:函数。即:函数调用开始时给变量分配动态内存空间。函数调用开始时给变量分配动态内存空间。函数结束时,释放内存,变量的生命周期终止。结束时,释放内

33、存,变量的生命周期终止。生命周期与有效范围一致。生命周期与有效范围一致。【例例5.15】局部变量的生命周期。局部变量的生命周期。2、static类型的局部变量、全局变量类型的局部变量、全局变量static修饰的全局变量和局部变量修饰的全局变量和局部变量分别称为静态全分别称为静态全局变量和静态局部变量。局变量和静态局部变量。这类变量生命周期与程这类变量生命周期与程序共存亡。序共存亡。在程序开始执行前给它们分配内存,在程序开始执行前给它们分配内存,程序执行完毕时释放内存。在程序执行过程中它程序执行完毕时释放内存。在程序执行过程中它们占据固定的存储空间。生命周期是到整个程序们占据固定的存储空间。生命

34、周期是到整个程序结束,有效范围是到所在的源文件结束。结束,有效范围是到所在的源文件结束。【例例5.16】静态局部变量的生命周期。静态局部变量的生命周期。3、全局变量、全局变量普通的全局变量存放在内存中的静态存普通的全局变量存放在内存中的静态存储区,生命周期到整个程序结束。它的储区,生命周期到整个程序结束。它的有效范围可以通过将其声明为有效范围可以通过将其声明为extern类类型扩展到整个程序结束。型扩展到整个程序结束。【例例5.17】全局变量的生命周期和有效区域。全局变量的生命周期和有效区域。同一个项目中有两个源文件同一个项目中有两个源文件test1.c、test2.c。运行运行test2.c

35、文件,出错。虽然全局变文件,出错。虽然全局变量量A的生命期是整个程序,在整个程的生命期是整个程序,在整个程序中都占有内存,但是它的有效区域序中都占有内存,但是它的有效区域是是test1.c文件,在文件,在test2.c文件中不能文件中不能使用使用test1.c文件。文件。4、extern类型的全局变量类型的全局变量extern类型的全局变量存放在内存中类型的全局变量存放在内存中的静态存储区,生命周期到整个程序结的静态存储区,生命周期到整个程序结束,它的有效范围是到整个程序结束,束,它的有效范围是到整个程序结束,两者一致。两者一致。【例例5.18】extern类型全局变量的生命周期和类型全局变量

36、的生命周期和 有效区域。有效区域。同一个项目中有两个源文件同一个项目中有两个源文件test1.c、test2.c。运行运行test2.c文件,输出文件,输出0。扩展也可以写为扩展也可以写为“extern A;”,这是,这是test1.c中定义的全局变量中定义的全局变量A的有效区域的有效区域扩展到扩展到test2.c文件中。若未给全局变文件中。若未给全局变量赋初值,内存空间中的值为量赋初值,内存空间中的值为0。【例例5.19】用用extern扩展扩展static类型全局变量类型全局变量的有效区域。的有效区域。运行运行test2.c文件,程序出错。静态全文件,程序出错。静态全局变量局变量A的有效区

37、域是其定义所在的的有效区域是其定义所在的文件文件test1.c,不能扩展它的有效范围,不能扩展它的有效范围到程序中的其他文件。到程序中的其他文件。5、register类型的局部变量类型的局部变量有些使用频繁的变量,为了节省存取变量时有些使用频繁的变量,为了节省存取变量时花费的时间,花费的时间,提高程序效率提高程序效率,可以将其设置,可以将其设置为为register类型的变量,直接从寄存器中存类型的变量,直接从寄存器中存取。例如:在一个函数中执行取。例如:在一个函数中执行100000此循此循环,每次循环都要用到某个局部变量环,每次循环都要用到某个局部变量i,就可,就可以将其说明为以将其说明为regis

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论