6.5 全程变量、局部变量
发布时间:
在函数外部定义的变量称为外部变量或全局变量,在函数内部定义的变量称为内部变量或局部变量。
全局变量
定义在函数外部没有被花括号括起来的变量称为全局变量,全局变量的作用域是从变量定义的位置开始到文件结束。由于全局变量是在函数外部定义的,因此对所有函数而言都是外部的,可以在文件中位于全局变量定义后面的任何函数中使用。
例 输入两个正整数,编程计算两个数的最小公倍数。程序如下:
#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,局部变量值是随机的,要初始化初值,局部变量受栈空间大小限制,大数组需要注意。通俗说,局部变量的数组不能开很大,全局变量随便。