所谓变量的作用域是指变量在程序中能够访问或使用的范围。根据变量的作用域,把变量分成两类:一类是局部变量,一类是全局变量。
1.局部变量
函数内部定义的变量及形参都是局部变量,其作用域是本函数,也就是说局部变量只能在本函数中使用,其他函数不能访问。到目前为止,前面所介绍的所有程序中的变量和形参都是局部变量,包括main()函数中的变量。
例如:
1 int fun1(char x,float y)
2 {
3 int a,b,c;
4 }
5 int fun2(char a,float b)
6 {
7 int i,j,k;
8 }
9 int main()
10 {
11 double m,n;
12 }
函数fun1()中的x、y、a、b、c是函数fun1()的局部变量,其作用域是fun1()函数;同样,函数fun2()中的a、b、i、j、k是函数fun2()的局部变量,其作用域是fun2()函数;主函数中的m、n也是局部变量。
关于局部变量的几点说明:
(1)函数的形参及内部定义的变量都是局部变量,其作用域是本函数。
(2)不同函数中的局部变量可以重名,但它们表示的是不同的变量,分配不同的存储单元,可以存放不同的数据,互不干扰。
(3)在复合语句中也可以定义变量,这种变量也是局部变量,它们的作用域是复合语句本身,在复合语句外不能使用。在这种局部变量起作用的复合语句中,重名的其他局部变量不能使用。
例如:
1 float min(float x,float y)
2 {
3 float z;
4 {
5 float q;
6 if(x<y) q=x;
7 else q=y;
8 z=q;
9 }
10 return(z);
11 }(www.xing528.com)
2.全局变量
在函数外定义的变量是全局变量,可以在所有函数之前定义,和文件包含命令放在一起,也可以在函数之间定义,还可以在所有函数的最后定义。全局变量的作用域是从定义处开始后的所有函数。
例如:
1 #include"stdio.h"
2 int a,b,c;
3 float fun1()
4 {
5 }
6 float x,y;
7 char fun2()
8 {
9 }
10 char c1,c2;
11 int main()
12 {
13 }
变量a、b、c、x、y、c1、c2都是全局变量,但它们的作用域不完全相同。变量a、b、c的作用域是所有函数,变量x、y的作用域是函数fun2()和函数main(),变量c1、c2的作用域是函数main()。可见,全局变量的作用域并不一定是全部函数,那么,怎样在全局变量定义前使用全局变量呢?
关于全局变量的几点说明:
(1)若要在全局变量定义前的函数中引用全局变量,则应在该函数中使用关键字“extern”对要引用的全局变量加以说明,说明本函数要调用本函数之外的已定义好的某全局变量。
例如,上例中在函数fun1()中要调用变量c1、c2,则在函数fun1()中对c1、c2要加以如下说明:
float fun1()
{
extern char c1,c2;
·
·
·
}
这样,函数fun1()中就可以调用变量c1、c2了。一般情况下是将全局变量定义在调用它的函数之前或所有函数之前,这样不用说明就可以直接调用全局变量。
(2)全局变量的使用增加了函数间数据联系的渠道,使主调函数能获得更多的函数处理的数据,减少了函数参数的数量,节省了内存资源,减少了参数传递的时间消耗,提高了程序运行的速度。
(3)全局变量的使用虽有上述好处,但弊端也很多:①程序执行过程中,全局变量始终占有存储单元,就像班级的固定教室一样,资源得不到充分利用。②全局变量的使用,使被调函数过多地依赖全局变量而运行,降低了函数的独立性、可移植性和可读性。因此,除非必要,一般不要使用全局变量。
(4)当全局变量与局部变量重名时,在局部变量的作用域内,全局变量被“屏蔽”,不能访问。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。