首页 理论教育 C语言程序设计教程变量作用域

C语言程序设计教程变量作用域

更新时间:2025-01-18 工作计划 版权反馈
【摘要】:所谓变量的作用域是指变量在程序中能够访问或使用的范围。根据变量的作用域,把变量分成两类:一类是局部变量,一类是全局变量。在复合语句中也可以定义变量,这种变量也是局部变量,它们的作用域是复合语句本身,在复合语句外不能使用。

所谓变量的作用域是指变量在程序中能够访问或使用的范围。根据变量的作用域,把变量分成两类:一类是局部变量,一类是全局变量。

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)当全局变量与局部变量重名时,在局部变量的作用域内,全局变量被“屏蔽”,不能访问。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈