版权归原作者所有,如有侵权,请联系我们

[科普中国]-局部变量

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量1。局部变量的作用域是定义该变量的函数或定义该变量的复合语句。局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。

定义局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量。

局部变量的生存期:从函数被调用的时刻算起到函数返回调用处的时刻结束2。

局部变量的作用域是定义该变量的函数或定义该变量的复合语句。也就是说,局部变量只在定义它的函数或复合语句范围内有效,只能在定义它的函数或复合语句内才能使用它们。例如:

在函数f1内定义了三个变量,a为形参,b、c为一般变量。在fl的范围内a、b、c有效,或者说a、b、c变量的作用域限于f1内。同理,x、y、i、j的作用域限于f2内。m、n的作用域限于main函数内。关于局部变量的作用域还要说明以下几点:

1、主函数main()中定义的变量也只在主函数中有效,而不能因为在主函数中定义在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。因为主函数也是一个函数,它与其他函数是平行关系。这一点是与其他语言不同的,应予以注意。

2、不同函数中可以使用相同名字的变量,它们代表不同的对象,分配不同的单元,互不干扰。例如,上面在f1函数中定义了变量b和c,倘若在f2函数中也定义变量b和c,它们在内存中占不同的单元,互不干扰。

3、形式参数是属于被调函数的局部变量。例如上面f1函数中的形参a,也只在f1函数中有效,其他函数可以调用f1函数,但不能引用f1函数中的形参a。

4、在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。

全局变量全局变量也称外部变量,它是在函数外部定义的变量。它不属于哪一个函数,而是属于一个源程序文件:其作用域是整个源程序3。

几乎程序中的所有函数都能使用全局变量,客观上全局变量就起到了在函数间传递数据的作用,甚至可以减少形参和实参的数量。当然在享用它的好处时,也要慎重,避免全局变量过多带来的降低函数通用性及存储空间的浪费。

对于全局变量还有以下几点说明:

1、全局变量从程序运行起即占据内存,在程序整个运行过程中可随时访问,程序退出时释放内存。与之对应的局部变量在进入语句块时获得内存,仅能由语句块内的语句访问,退出语句块时释放内存,不再有效。

2、局部变量定义后不会自动初始化,除非程序员指定初值。全局变量在程序员不指定初值的情况下自动初始化为零。

3、在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。

变量的作用域在现实生活中,世界通用语言为英语,如果在其他国家说汉语,别人可能听不懂,但是如果说英语,那么世界各地的人都可能明白。与此类似,程序中的变量也有它自己的使用范围,我们称其为变量的作用域。变量的作用域都是通过它在程序中的位置隐式说明的。

C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量,如图所示。

重名现象在C语言等面向过程语言中,局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。

应用在Java等面向对象语言中,也可能出现多个局部变量重名的情况。例如一个方法的形式参数与类成员的名字相同,这时形式参数会把类成员屏蔽,如果要访问类成员,应该用this关键字。

本词条内容贡献者为:

韩彦昌 - 教授 - 华南师范大学数学科学学院