局部变量和全局变量
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、变量的存储类别
三、静态类局部变量(static) 如果希望在函数调用结束后仍然保留函数中定义的局 部变量的值,则可以将该局部变量定义为静态局部变 量。在定义时,应在定义变量的类型说明符前面使用 static关键字。 如: static int i; 说明: ① 静态局部变量是在静态存储区中分配存储单元的,因 此,在函数调用结束后,它的值并不消失,其值能够 保持连续性。 ② 在变量初始化方面,静态局部变量是在编译过程中赋 初值的,且只赋一次初值,在程序运行时其初值已经 确定,以后调用函数时不再赋初值,而是连续保留上 一次函数调用时的结果。静态局部变量的默认初值为 0。
二、变量的存储类别
例: #include “stdio.h” void test_static( ) { static int vs=0; printf(“static=%d\n”,vs); ++vs; } main( ) { int i; for(i=0;i<4;i++) test_static( ); }
二、自动类变量(auto) 在函数内部定义的变量,如果不指定其存储类型,那 么它就是自动类存储变量。因此,auto是可以缺省的。 说明: ① 自动类变量是在动态存储区内分配存储单元的,函数 返回时,编译系统将放弃这些存储单元,因此,当函 数调用结束时,自动类变量中存放的数据也就消失了。 ② 在变量初始化方面,自动类变量在每调用一次函数时 都赋一次初值,且自动类变量的默认初值不确定。
二、变量的存储类别
程序运行结果: static=0 static=1 static=2 static=3 注意:由于test_static函数中的变量vs是静态的,所以, 它仅在程序编译阶段赋一次初值,在函数调用结束 后仍然能保留其原来的值。
数组作为函数参数
一 、 数组元素作实参
在调用函数时,数组元素可以作为实参传送给形参,形 参的类型必须与数组元素的类型一致。
{ int a,b; …… { int c; c=a+b; } } a,b在此范围 内有效
C在此范围内有效
一、 局部变量和全局变量
二、全局变量
在函数之外定义的变量称为全局变量,又称为外部变量。它的 有效范围为:从定义变量的位置开始到本程序结束。
如: int p=1,q=5; float f1( a ) int a; { int b,c; …… } char c1,c2; char f2( x,y ) int x,y; { int i,j; …… } main( ) { int m,n; …… }
数组作为函数参数
4、数组名作函数参数时,不是“值传递”,不是单向传递, 而是把实参数组的起始地址传递给形参数组,这样两个数 组就共占同一段内存单元。
数组作为函数参数
说明:
1、用数组Leabharlann Baidu作参数,应该在主调用函数和被调用函数分别 定义数组,例如array是形参名,score是实参数组名,分别 在其所在函数中定义,不能只在一方定义。 2、实参数组与形参数组类型应一致,如不一致,结果将出 错。
3、实参数组和形参数组大小可以一致也可以不一致,C编译 对形参数组大小不作检查,只是将实参数组的首地址传给形 参数组。
数组作为函数参数
二、数组名做实参
可以用数组名作函数参数,此时实参与形参都应用数组 名(或用数组指针)。
例、有一个数组score,内放10个学生成绩,求平均成绩。
数组作为函数参数
float average(array) main() float array[10]; {float score[10],aver; {int i; int i; Float aver,sum=array[0]; printf(“input 10 scores:\n”); for(i=1;i<10;i++) for(i=0;i<10;i++) sum=sum+array[i]; scanf(“%f”,&score[i]); aver=sum/10; printf(“\n”); return(aver); aver=average(score); } printf(“average scoer is%5.2f”, aver); 运行情况: input 10 scores: } 100 56 78 98.5 76 87 99 67.5 75 97 average score is 83.40
全局变量c1, c2的作用范围
全局变量p,q 的作用范围
二、变量的存储类别
一、动态存储与静态存储
四个与存储类别相关的说明符: auto(自动),register(寄存器),static(静态), extern(外部)。 下图显示了一个C程序在内存中的存放情况:
动态存储区
静态存储区 程序代码区
二、变量的存储类别
一、 局部变量和全局变量
一、局部变量
在一个函数内部定义的变量是内部变量,它只在本 函数范围内有效,即只有在本函数内才能使用它们, 在此函数以外是不能使用这些变量的。这称为“局部 变量”。
一、 局部变量和全局变量
一、局部变量 如: float f1( a ) int a; { int b,c; …… } char f2( x,y ) int x,y; { int i,j; }
main( ) { int m,n; …… }
a,b,c有效
x,y,i,j有效
m,n有效
一、 局部变量和全局变量
一、局部变量 说明: ⑴ 不同函数中可以使用相同名字的变量,它们代表不 同的对象,互不干扰。 ⑵ 形式参数也是局部变量。 ⑶ 在一个函数内部,可以在复合语句中定义变量,这 些变量只在本复合语句中有效。 如: main( )