Skip to content
本页目录

6.5 全程变量、局部变量

发布时间:

在函数外部定义的变量称为外部变量或全局变量,在函数内部定义的变量称为内部变量或局部变量。

全局变量

定义在函数外部没有被花括号括起来的变量称为全局变量,全局变量的作用域是从变量定义的位置开始到文件结束。由于全局变量是在函数外部定义的,因此对所有函数而言都是外部的,可以在文件中位于全局变量定义后面的任何函数中使用。

例 输入两个正整数,编程计算两个数的最小公倍数。 程序如下:

js
#include<iostream>
using namespace std;
int x,y;                //定义全局变量
x,yint gcd(int x,int y)    //求最大公约数,形参x,y是局部变量
{
	int r=x%y;       //r是局部变量,局部变量x,y屏蔽全局变量	
	while(r!=0){		
		x=y;	
		y=r;
		r=x%y;
	}	
	return y;
}

int lcm()                        //求最小公倍数
{	
	return x*y/gcd(x,y);      //这里x,y是全局变量
}

int main()       //gcd和lcm在main()前,函数不必声明
{	
	cin>>x>>y;  //这里x,y是全局变量	
	cout<<lcm()<<endl;	
	return 0;
}
   

运行结果:
输入: 12 18
输出: 36

  • 使用全局变量的说明:

在一个函数内部,既可以使用本函数定义的局部变量,也可以使用在此函数前定义的全局变量。 全局变量的作用是使得函数间多了一种传递信息的方式。如果在一个程序中多个函数都要对同一个变量进行处理,即共享,就可以将这个变量定义成全局变量,使用非常方便,但副作用也不可低估。 过多地使用全局变量,会增加调试难度。因为多个函数都能改变全局变量的值,不易判断某个时刻全局变量的值。 过多地使用全局变量,会降低程序的通用性。如果将一个函数移植到另一个程序中,需要将全局变量一起移植过去,同时还有可能出现重名问题。 全局变量在程序执行的全过程中一直占用内存单元。 全局变量在定义时若没有赋初值,其默认值为0。

  • 局部变量

⑴局部变量的作用域是在定义该变量的函数内部,换句话说,局部变量只在定义它的函数内有效。函数的形参也是局部变量。局部变量的存储空间是临时分配的,当函数执行完毕,局部变量的空间就被释放,其中的值无法保留到下次使用。

⑵由于局部变量的作用域仅局限于本函数内部,所以,在不同的函数中变量名可以相同,它们分别代表不同的对象,在内存中占据不同的内存单元,互不干扰。

⑶一个局部变量和一个全局变量是可以重名的,在相同的作用域内局部变量有效时全局变量无效。即局部变量可以屏蔽全局变量 (4)在代码块中定义的变量的存在时间和作用域将被限制在该代码块中。如for(int i;i<=n;i++) {sum+=i}中的i是在该for循环语句中定义的,存在时间和作用域只能被限制在该for循环语句中。 (5)这里需要强调的是,主函数main中定义的变量也是局部变量,这一点与其他程序设计语言不同。 (6) 全局变量数组初始全部为0,局部变量值是随机的,要初始化初值,局部变量受栈空间大小限制,大数组需要注意。通俗说,局部变量的数组不能开很大,全局变量随便。