版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第6 6章章 函数函数 函数的定义函数的定义函数参数的值的传递函数参数的值的传递函数的调用函数的调用数组作为函数的参数数组作为函数的参数函数与指针函数与指针变量的作用域及存贮类型变量的作用域及存贮类型(指向函数的指针不要求!)(指向函数的指针不要求!)本章要点本章要点如前所述,如前所述,C程序是由函数组成的。通过函数,我们可以一程序是由函数组成的。通过函数,我们可以一个较大的问题分成若干个小问题来解决,如用积木建房子。个较大的问题分成若干个小问题来解决,如用积木建房子。1 1 函数概述函数概述标准库函数:标准库函数:由系统提供,用户可以不必自己去编由系统提供,用户可以不必自己去编写程序段而直
2、接调用这些函数。但必须打开相应的写程序段而直接调用这些函数。但必须打开相应的头文件。如头文件。如printfprintf、scanfscanf等函数。等函数。用户自定义函数:用户自定义函数:为了实现用户的特殊需要而自编为了实现用户的特殊需要而自编的函数。如的函数。如max(int x,int y) max(int x,int y) 有参函数:有参函数:在调用函数时,需要进行参数传递的函在调用函数时,需要进行参数传递的函数,如数,如max(a,b);max(a,b);无参函数:无参函数:如如 getchar(); getchar(); 1无参函数的定义:无参函数的定义: 类型标识符类型标识符 函
3、数名()函数名() 声明部分;声明部分; /*定义变量定义变量*/ 语句;语句; /*执行部分执行部分*/ 2有参函数的定义:有参函数的定义: 类型标识符类型标识符 函数名(形式参数说明表列)函数名(形式参数说明表列) 声明部分;声明部分; /*定义变量定义变量*/ 语句;语句; /*执行部分执行部分*/ 2 2 函数定义和调用函数定义和调用函数的函数的“类型标识符类型标识符”用来说明函数的返回值的类型,用来说明函数的返回值的类型,通常我们称之为通常我们称之为函数的类型函数的类型。如果定义这个函数只是。如果定义这个函数只是为了实现某个操作而不需要返回值,则应将该函数定为了实现某个操作而不需要返
4、回值,则应将该函数定义为无返回值类型,即义为无返回值类型,即void类型。类型。如果你定义的函数不是如果你定义的函数不是void类型,则意味着该函数只类型,则意味着该函数只有一个值。此时,在该函数的结束处,应使用有一个值。此时,在该函数的结束处,应使用return语句给主调函数带回一个值。语句给主调函数带回一个值。当函数执行到当函数执行到return语句时,立即中止本函数的执行,语句时,立即中止本函数的执行,而返回到主调函数处,同时将相应而返回到主调函数处,同时将相应return 语句中的语句中的值带回到主调函数。值带回到主调函数。一个函数中可以有多个一个函数中可以有多个return语句,先执
5、行到哪个,语句,先执行到哪个,哪个就起作用,即执行到哪个就起作用,即执行到return语句时,程序将不再语句时,程序将不再向下执行,而返回到调用它的地方。向下执行,而返回到调用它的地方。3 3 函数的返回值函数的返回值“形参形参”与与“实参实参” :在定义函数时函数名后面括号中的变量称为“形式参数”,简称“形参形参”;调用函数时函数名后括号中对应参数称为“实际参数”,简称“实参实参”。如: int max( int x, int y) return (xy?x:y); 形参形参 void main( ) int a=1,b=4; c=max(a, b) 实参实参4 4 函数的参数传递函数的参数
6、传递函数定义举例int factor ( int n ) int s=1,k; for(k=1;k=n;k+) s=s*k; return s;“函数类型函数类型”指指函数返回值的类函数返回值的类型,型,也就是说,也就是说,当该函数执行完当该函数执行完成以后,得到一成以后,得到一个什么类型的结个什么类型的结果。果。若省略此项,则若省略此项,则认为返回类型是认为返回类型是intint若函数无返回值,若函数无返回值,则应定义类型为则应定义类型为voidvoid函数定义举例int factor ( int n ) int s=1,k; for(k=1;k=n;k+) s=s*k; return s;
7、函数名:函数名:通常是通常是一个标识符,在一个标识符,在一个程序中除了一个程序中除了主函数外其余函主函数外其余函数的名字可以任数的名字可以任意取,但应尽量意取,但应尽量做到见名知意。做到见名知意。函数名后面的函数名后面的 “()()” 必须有,必须有,表示是函数。表示是函数。函数定义举例int factor ( int n ) int s=1,k; for(k=1;k=n;k+) s=s*k; return s;形参表:形参表:函数定函数定义时的参数称为义时的参数称为形式参数,形式参数,形式形式参数彼此间用逗参数彼此间用逗号分隔。每个参号分隔。每个参数应分别指明其数应分别指明其类型。类型。没有
8、形式参数的没有形式参数的函数称为无参函函数称为无参函数。注意无参函数。注意无参函数名字后的圆括数名字后的圆括号不能省。号不能省。函数定义举例int factor ( int n ) int s=1,k; for(k=1;k=n;k+) s=s*k; return s;函数中所需变量函数中所需变量的定义的定义注:形参及函数注:形参及函数中的变量均是在中的变量均是在函数被调用时才函数被调用时才为它们分配存储为它们分配存储单元,函数调用单元,函数调用结束后,其存储结束后,其存储单元会被系统收单元会被系统收回!回!函数定义举例int factor ( int n ) int s=1,k; for(k=
9、1;kb) c=1; if(a = =b) c=0; if(ay?x:y; void main( ) . c=max(a,b); 3 3、在调用这个函数之前对所调用个函数作一个说明,让、在调用这个函数之前对所调用个函数作一个说明,让系统知道这个函数需要的参数、类型,以及返回值的系统知道这个函数需要的参数、类型,以及返回值的类型,这即是对该类型,这即是对该函数的声明函数的声明。但是注意,。但是注意,对函数说对函数说明时明时, ,括号后有分号;而函数定义时则没有。括号后有分号;而函数定义时则没有。如:如: int max(int x,int y); / - 函数的声明函数的声明 void main
10、( ) int max(int x,int y); / - 函数的声明函数的声明 c=max(a,b); 主程序中对函数的调用语句主程序中对函数的调用语句 int max(int x,int y) return xy?x:y; 函数的定义函数的定义 (2 2)、对被调用函数的声明)、对被调用函数的声明函数声明可以在主调函数内,也可以在函数外。函数声明可以在主调函数内,也可以在函数外。其区其区别在于别在于:在函数体外部进行的声明,在本文件中的所:在函数体外部进行的声明,在本文件中的所有地方都有效,无需在主调函数内再次声明;在函数有地方都有效,无需在主调函数内再次声明;在函数内部进行的声明,则所声
11、明的函数只能在本函数内部内部进行的声明,则所声明的函数只能在本函数内部使用;使用;所谓的函数的嵌套调用,就是在调用一个函数的过程所谓的函数的嵌套调用,就是在调用一个函数的过程中,又调用了其它函数。如在主函数中调用了中,又调用了其它函数。如在主函数中调用了a a函数,函数,而在而在a a函数中又调用了函数中又调用了b b函数,在函数,在b b函数中又调用了函数中又调用了c c函函数,这就是函数的嵌套调用。其调用过程如下图所示:数,这就是函数的嵌套调用。其调用过程如下图所示: 6 6 函数的嵌套调用函数的嵌套调用 main() a( ); a( )a( ) b( ); b( ); c( )c( )
12、 b( )b( ) c( ); c( ); main() int a=1,b; b=func1(a); printf(“%d”,b);func1(int x) int y; y=func2(x)+1; return y; 例:函数的嵌套调用例:函数的嵌套调用func2(int x) int y; y=func3(x)+1; return y; func3(int x) int y; y=x+5; return y; 输出结果:8数组元素做函数的实参,其用法与变量相同。(每个数组元素做函数的实参,其用法与变量相同。(每个的数组元素相当于一个独立变量)。例如:的数组元素相当于一个独立变量)。例如:
13、7 7 函数与函数与数组数组数组数组作为作为函数的参数,可以有两种情况:函数的参数,可以有两种情况:例:比较两个数组中的元素,统计出例:比较两个数组中的元素,统计出a a中大于对应中大于对应b b中元素的位置。中元素的位置。int compare(int x,int y) int z; if(xy) z=1; else if(x=y) z=0; else z=-1; return z; void main( )int a10=,b10=, i , t; for(i=0;i0)printf(“a%db%d ”,i,i); 输出:输出: a2b2 数组名作为函数参数:数组名作为函数参数:前面我们已
14、经知道:在前面我们已经知道:在C C中,数组名代表的是数组的起中,数组名代表的是数组的起始地址。因此,始地址。因此,当数组名作为函数的参数时,所传递当数组名作为函数的参数时,所传递的也是数组的起始地址。的也是数组的起始地址。8 8 数组作为数组作为函数的参数函数的参数例:自编字符串复制函数例:自编字符串复制函数strcopystrcopy strcopy(char str1130,char str2230) int i; for(i=0;str22i!=0;i+) str11i=str22i; str11i=0; void main( ) char str130; char str230=”a
15、bcde”; printf(“%s”,str1); strcopy(str1,str2); printf(“%s”,str1); 思考:思考:mainmain中打印出的结果是?中打印出的结果是?Strcopy Strcopy 退出循环是时退出循环是时I I值?值?main() int i,a5=1,2,3,4,5;例例1 1:数组名作为函数参数:数组名作为函数参数func( a );0 x2000a01a12a23a34a45void func(int x5)void func(int x5) x3=0; for(i=0;i5;i+) printf(“%d ”,ai); 0 x2000X3=0
16、;X3X3(0 x2000+30 x2000+3)所对应的元素所对应的元素0 x2000a01X0a12X1a23X2a30X3a45X4例例2 2:试比较以下程序与上面程序的区别:试比较以下程序与上面程序的区别输出结果:1 2 3 4 5void func(int x) x=0; main() int i,a5=1,2,3,4,5; func( a3 ); for(i=0;i5;i+) printf(“%d ”,ai); a010 x2000a12a23a34a45X 4X 4X 0X 01 1、当用数组名作为函数参数时,并不是象变量作形、当用数组名作为函数参数时,并不是象变量作形参一样,再
17、开空间给形参数组,而是接收数组名参一样,再开空间给形参数组,而是接收数组名传递来的数组的首地址。所以,在子函数中对数传递来的数组的首地址。所以,在子函数中对数组的修改,实质上就是对主函数中数组的修改。组的修改,实质上就是对主函数中数组的修改。2 2、实参数组与形参数组类型必须一致。、实参数组与形参数组类型必须一致。 3 3、主调函数和被调函数中分别定义数组名,可以一、主调函数和被调函数中分别定义数组名,可以一样,也可不一样,系统回自动区分,互不干扰。样,也可不一样,系统回自动区分,互不干扰。 由上面两例所得结论:由上面两例所得结论:再看几例:例例1 1:自编字符串复制函数:自编字符串复制函数s
18、trcopystrcopy strcopy(char str130,char str230) int i; for(i=0;str2i!=0;i+) str1i=str2i; str1i=0; void main( ) char str130; char str230=”abcde”; printf(“%s”,str1); strcopy(str1,str2); printf(“%s”,str1); 再看几例:例例2 2:自编求字符串长函数:自编求字符串长函数strlenthstrlenth strlenth(char str30) int i; for(i=0;str2i!=0;i+) ;
19、return i; void main( ) char str130=”abcde”; int len; len=strlenth(str1); printf(“%d”,len); 再看几例:例例3 3:自编字符串比较函数:自编字符串比较函数strcompstrcomp int strcomp(char str1,char str2) int i; for(i=0;str1i=str2i & str1i!=0;i+) ; return (str1i-str2i); void main( ) char str130,str230; int d; gets(str1); gets(str2
20、); d=strcomp(str1,str2); printf(“%d”,d); 9 指针作为函数参数指针作为函数参数1、传址调用传址调用:指针变量作为函数参数指针变量作为函数参数当指针变量作为函数参数时当指针变量作为函数参数时, ,传递的是变量的地传递的是变量的地址。读以下程序:址。读以下程序:a30 x2000:P主主&at t30 x6000:P函函&a如果将程序的第如果将程序的第4 4)行改为)行改为(* *p p)+,+,请再观察请再观察程序的结果:程序的结果:a30 x2000:p&at30 x6000:p&a例例1 1:两数交换函数:两数交换函数s
21、wapswapt:a0 x2000b02002p1&ap2&bp1&ap2&b例例1 1:两数交换函数:两数交换函数swapswapt:a30 x2000b502002p1&ap2&bp1&ap2&ba30 x2000b502002p1&ap2&bp1&ap2&bp例例2 2:两数交换函数:两数交换函数swapswapa30 x2000b502002p1&ap2&bp1&bp2&ap例例2 2:两数交换函数:两数交换函数swapswap例例3 3:两数交换函数:两数交
22、换函数swapswap9 指针与函数 一维数组的指针作函数参数 例如被调函数abc的定义形式有以下三种: void abc(int b10) void abc(int b ) void abc(int *b) 在主调函数有如下定义: int a10,*p=a; 则调用abc函数时可用 abc(a) 或 abc(p)9 指针与函数 【例8.20】字符串复制函数。 void copystr(char , char ) while ( +=+)!=0); main( ) char 80,=I am a student.; copystr( , ); printf(%sn,c); 9 指针与函数 二维
23、数组的指针作函数参数 用函数输入输出整型二维数组,函数的形参为行指针行指针。 void inarr(int (*p1)4,int m) int i,j; /* 可改写为void inarr(int p1 4,int m) */ for (i=0; im; i+) for (j=0; j4; j+) scanf(%d,*(p1+i)+j); 9 指针与函数 二维数组的指针作函数参数 指向二维数组元素的指针作函数参数【例】用函数输入输出整型二维数组,函数的形参为指向二维 数组元素的指针元素的指针。 void inarr( int *p1, int m,int n) int i,j; for (i=
24、0; im; i+) for (j=0; j 0用递归求解更简单用递归求解更简单Main()long n;Scanf(“%ld”,&n);Printf(“%ld”,fact(n); 递归过程递归过程1 1. .递归过程的特点:递归过程的特点:是程序设计的一个强有力的工具,它具有是程序设计的一个强有力的工具,它具有结构清晰,程序易编、易读、易调试,程序正确性易证明等结构清晰,程序易编、易读、易调试,程序正确性易证明等优点;但运行效率低。优点;但运行效率低。 2 2. .基本原理:基本原理:基本原理是重复地把问题转化为与原问题相似的基本原理是重复地把问题转化为与原问题相似的新问题,新问题,
25、 直到问题可解决为止。直到问题可解决为止。3 3. .关键点关键点: 用较用较简单简单的新问题来表示的新问题来表示较复杂较复杂的原问题的原问题 例如例如 : n n!= = n(n-1)n(n-1)!,!,或或 n! = (n+1)n! = (n+1)!/(n+1) /(n+1) 前 者前 者 ( ( n - 1 )n - 1 ) ! 较 原 问 题较 原 问 题 n n ! 简 单 , 可 行 ;简 单 , 可 行 ; 而后者而后者( (n+1)n+1)!较较n n!更复杂,不可行。更复杂,不可行。 不能产生自己调用自己的无穷序列,即必须有一个递归调不能产生自己调用自己的无穷序列,即必须有一
26、个递归调用序列的用序列的“出口出口”,来终止递归调用。,来终止递归调用。递归函数:Fun(n)if(n0) fun(n/2);Printf(“%d ”,n); Main() int a=6; fun(a); 请问该程序输出结果是:#include #include void main()int i; char *day_name(int n);printf(“input Day No:n”);scanf(“%d”,&i);printf(“Day No:%2d %s n”,i, day_name(i) );char *day_name(int n)static char *name8 =
27、“error”,”Monday”,”Tuesday”,; return(n7)?name0,namen);变量的作用域变量的作用域:使用变量都必须先定义。但并非定义之后,在程使用变量都必须先定义。但并非定义之后,在程序的任何地方均可使用这一变量。变量是有一定序的任何地方均可使用这一变量。变量是有一定的作用范围的。根据变量的作用范围,可将变量的作用范围的。根据变量的作用范围,可将变量分为分为局部变量(内部变量)局部变量(内部变量)和和全局变量(外部变全局变量(外部变量)量)。局部变量:局部变量:作用范围局限与某个函数或结构体复作用范围局限与某个函数或结构体复合语句内。合语句内。全局变量:全局变量
28、:在函数体外定义的变量是全局变量。在函数体外定义的变量是全局变量。其作用范围为定义之处开始,至整个程序结束。其作用范围为定义之处开始,至整个程序结束。 12 12 变量的存储类型变量的存储类型int max( int x , int y) int a; if(xy) return x; else return y; void main( ) int a=3,b=5,c; c=max(a,b); 局部变量例:局部变量例: x,y的作用范围的作用范围 a的作用范围的作用范围不同函数中可以不同函数中可以定义同名变量,定义同名变量,互不干扰互不干扰 a,b,c的作用范围的作用范围 主函数中定义的量主函
29、数中定义的量也属局部变量也属局部变量如果变量的定义是如果变量的定义是放在某放在某复合语句中复合语句中的,那么,该变量的,那么,该变量的作用范围就只在的作用范围就只在这个复合语句中有这个复合语句中有效。效。int max( int x , int y) c=x-y; return c; void main( ) int a=3,b=5,c; c=max(a,b); 局部变量例:局部变量例: x,y的作用范围的作用范围 语法错误,语法错误,不能识别的不能识别的标识符标识符C a,b,c的作用范围的作用范围 主函数中定义的量也属局部变量主函数中定义的量也属局部变量 int a,b; void fun
30、c(int x,int y) a=x+5; b=y+3; void main() func(3,8); printf(“a=%d,b=%dn”,a,b); func(4,6); printf(“a=%d,b=%dn”,a,b); func(a,b); printf(“a=%d,b=%dn”,a,b); 全局变量例:全局变量例: a,b的作用范围的作用范围 x,y的作用范围的作用范围 int a,b; void func(int x,int y) int b; a=x+5; b=y+3; void main() func(3,8); printf(“a=%d,b=%dn”,a,b); func(
31、4,6); printf(“a=%d,b=%dn”,a,b); func(a,b); printf(“a=%d,b=%dn”,a,b); 全局变量例:全局变量例: a,b的作用范围的作用范围 x,y的作用范围,的作用范围,全局变量全局变量b被屏蔽,被屏蔽,局部变量局部变量b起作用起作用全局变量全局变量在所有函数之外定义的变量在所有函数之外定义的变量在程序中定义它的位置以后都有效在程序中定义它的位置以后都有效自动初始化为自动初始化为0从程序运行起即占据内存,程序运行过程中可随时访问,程序退从程序运行起即占据内存,程序运行过程中可随时访问,程序退出时释放内存出时释放内存 在定义点之前或在其他文件中
32、引用,应该进行如下声明:在定义点之前或在其他文件中引用,应该进行如下声明: extern 类型名类型名 变量名变量名;使函数之间的数据交换更容易,也更高效使函数之间的数据交换更容易,也更高效但是并不推荐使用但是并不推荐使用因为谁都可以改写全局变量,所以很难确定是谁改写了它因为谁都可以改写全局变量,所以很难确定是谁改写了它结论:结论:尽可能不使用全局变量!尽可能不使用全局变量!全局变量与局部变量同名屏蔽原则:局部优先全局变量与局部变量同名屏蔽原则:局部优先局部变量的全局变量比较:局部变量的全局变量比较:根据变量的存在的时间(生存期),变量可划根据变量的存在的时间(生存期),变量可划分为:分为:动
33、态存储变量动态存储变量和和静态存储变量静态存储变量。动态存储方式:动态存储方式:是在程序运行期间根据需要进是在程序运行期间根据需要进行动态分配存储空间的方式。与之对应的变量行动态分配存储空间的方式。与之对应的变量被称为被称为动态存储变量。动态存储变量。通常,如果定义的变量通常,如果定义的变量没有其它的说明的话,系统自动将之作为一个没有其它的说明的话,系统自动将之作为一个动态存储变量,简称动态存储变量,简称动态变量动态变量。当然,也可用。当然,也可用关健字关健字“autoauto”进行定义。进行定义。静态存储方式:静态存储方式:是指程序在运行期间分配给固是指程序在运行期间分配给固定存储空间的方式
34、。与之对应的变量被称为定存储空间的方式。与之对应的变量被称为静静态存储变量,态存储变量,简称简称静态变量。静态变量。必须用关健字必须用关健字“staticstatic”进行定义。进行定义。 1313 动态存储变量与静态存储变量动态存储变量与静态存储变量 13 动态存储变量与静态存储变量动态存储变量与静态存储变量 指数据在内存中存储的方式,即编译器为变量分配内存的方式,它决定变量的生存期动态存储根据需要临时分配存储空间,离开即释放静态存储在程序运行期间分配固定的存储空间不释放程序区程序区静态存储区静态存储区动态存储区动态存储区形参、自动变形参、自动变量、函数调用量、函数调用的现场等的现场等全局变
35、量、全局变量、静态变量静态变量自动变量 (auto )“自动”体现在进入语句块时自动申请内存,退出时自动释放内存 动态局部变量标准定义格式auto 类型名类型名 变量名变量名;缺省的存储类型不初始化时,值是不确定的不初始化时,值是不确定的 add(a,b);add(a,b);printf(“%d,%d”,a,b);Add(a,b);printf(“%d,%d”,a,b);void add (int x,int y) void add (int x,int y) 3535void main( )void main( ) int a=3,b=5; int a=3,b=5;x=x+10;y=y+10
36、; add(a,b);add(a,b);void add (int x,int y) void add (int x,int y) 35void main( )void main( ) int a=3,b=5; int a=3,b=5;x=x+10; y=y+10; 1315 add(a,b);add(a,b);35void main( )void main( ) int a=3,b=5; int a=3,b=5;printf(printf(“%d,%d%d,%d”,a,b);,a,b); add(a,b);add(a,b);printf(“%d,%d”,a,b);Add(a,b);print
37、f(“%d,%d”,a,b);void add (int x,int y) void add (int x,int y) 3535void main( )void main( ) int a=3,b=5; int a=3,b=5;x=x+10;y=y+10;void add (int x,int y) void add (int x,int y) 35void main( )void main( ) int a=3,b=5; int a=3,b=5;x=x+10; y=y+10; 1315 add(a,b);add(a,b);printf(“%d,%d”,a,b);Add(a,b);print
38、f(“%d,%d”,a,b);35void main( )void main( ) int a=3,b=5; int a=3,b=5; add(a,b);add(a,b);printf(“%d,%d”,a,b);Add(a,b);printf(“%d,%d”,a,b);静态变量(static)一个函数的内部变量在函数退出后失效。再次进入函数,变量值重新初始化把此变量定义为static,则变量的值可以保存到下次进入函数static int i;静态变量和全局变量都是静态存储类型自动初始化为自动初始化为0从静态存储区分配,生存期为整个程序运行期间从静态存储区分配,生存期为整个程序运行期间但作用域不
39、同但作用域不同对于用对于用“staticstatic”关健字定义的静态变量则不同:该类关健字定义的静态变量则不同:该类型的变量由系统分配一个专门的存储空间来存放;当型的变量由系统分配一个专门的存储空间来存放;当函数调用结束后,该变量所占空间并不释放,当下次函数调用结束后,该变量所占空间并不释放,当下次再调用该函数时,该变量中已有值。如下例所示:再调用该函数时,该变量中已有值。如下例所示:1313 动态存储变量与静态存储变量动态存储变量与静态存储变量 int f(int a) int b=0; static int c=3; b=b+1; c=c+1; return(a+b+c);); void
40、 main()() int a=2,b,i; b=f(a); printf(“%dn”,b); b=f(a); printf(“%dn”,b); b=f(a);b=f(a);2?2void main( )void main( ) int a=2,b; int a=2,b;int b=0;b=b+1;static int c=3;01313 动态存储变量与静态存储变量动态存储变量与静态存储变量 3int f ( int a ) b=f(a);b=f(a);2?void main( )void main( ) int a=2,b; int a=2,b;int b=0;b=b+1;static in
41、t c=3;c=c+1;11313 动态存储变量与静态存储变量动态存储变量与静态存储变量 32int f ( int a ) b=f(a);b=f(a);2?void main( )void main( ) int a=2,b; int a=2,b;int b=0;b=b+1;static int c=3;c=c+1;return (a+b+c);11313 动态存储变量与静态存储变量动态存储变量与静态存储变量 42int f ( int a ) b=f(a); b=f(a);27void main( )void main( ) int a=2,b; int a=2,b;1313 动态存储变量
42、与静态存储变量动态存储变量与静态存储变量 4printf(printf(“b=%dnb=%dn”,b);,b);输出:输出:b=7b=7 b=f(a); b=f(a);int f ( int a ) 2int b=0;0static int c=3;b=b+1; b=f(a);b=f(a);27void main( )void main( ) int a=2,b; int a=2,b;int b=0;b=b+1;static int c=3;c=c+1;11313 动态存储变量与静态存储变量动态存储变量与静态存储变量 42int f ( int a ) printf(printf(“b=%dnb=%dn”,b);,b); b=f(a); b=f(a); b=f(a); b=f(a);27void main( )void main( ) int a=2,b; int a=2,b;int b=0;b=b+1;static int c=0;c=c+1;return (a+b+c);11313 动态存储变量与静态存储变量动态存储变量与静态存储变量 52int f ( int a ) printf(printf(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 日常科普现象讲解
- 高中化学选择性必修一课时作业3
- 教学设计软件直接编写应用指南
- 公园设计前期分析
- 程序设计课件
- 网店设计核心要点与实施策略
- 胆囊结石的营养护理指南
- 居住区公共环境设施设计
- 骨科髋关节置换术术后物理治疗手册
- 急诊科窒息急救措施指南
- 2026儿童体能训练市场需求变化与行业趋势及商业机会评估报告
- 2026年高中学业水平考核美术复习试题及一套参考答案详解
- 2026年三年级道德与法治下册全册期末考试知识点材料
- 2026年民航地勤服务试卷及答案
- DB44∕T 2792-2025 城镇内涝风险评估与治理技术标准
- 2026年中考英语必背核心词汇1095词22天默写表【直接打印】
- 2025心肺复苏(CPR)指南(完整版)
- 5990kW屋顶分布式光伏发电项目施工总承包方案投标文件(技术标)
- (2026年)住院患者跌倒风险评估及预防课件
- 湖南省衡阳市2026年中考模拟考试化学试卷附答案
- 2026年经济开发区招聘面试企业服务对接实务练习题及解析
评论
0/150
提交评论