C++ 初学者指南 第五篇(7)

来源:互联网 发布:手机淘宝店铺装修在哪 编辑:程序博客网 时间:2024/06/05 15:05

必备技能 5.7:全局作用域
    既然局部变量只有在它们所在的函数中才是可见的,那么你也许会问:如何创建一个可以供多个函数共同使用的变量了?答案就是把变量声明在全局作用域中。全局作用域就是一个声明变量的区域,它的范围是覆盖所有函数的局部作用域的。在全局作用域中声明一个变量就创建了一个全局变量。
    全局变量在程序的任何部分都是可见的。它可以被程序的任何代码使用,它们的值在程序的整个生命周期都是保留的。因此,它的作用域就是整个程序。我们可以在函数的外面来声明全局变量。由于它们是全局的,任何表达式都可以使用它们,而不管这些表达式是位于哪个函数中。
    下面的程序演示了全局变量的用法。变量count被声明在了所有函数的外部,也是在main()函数的外部。实际上它的声明可以被放置在任何地方,只要不是放置在某个函数的内部即可。请记住:由于我们必须在使用变量之前就对变量进行声明,所以我们最好是把全局变量的声明放置在程序的最顶部。

//使用全局变量#include <iostream>using namespace std;void func1();void func2();int count; //全局变量int main(){    int i; // 局部变量    for( i = 0; i < 10 ; i++)    {        count = i * 2;        func1();    }    return 0;}void func1(){    cout << "count : " << count; //全局变量count    cout << '\n';    func2();}void func2(){    int count; // 局部变量    for ( count = 0; count < 3; count++ ) cout << '.';}

程序的输出如下:

count : 0
...count : 2
...count : 4
...count : 6
...count : 8
...count : 10
...count : 12
...count : 14
...count : 16
...count : 18
...
    仔细研究上面的代码,显然,在函数main()和func1()中使用的count变量都是全局变量。然而在函数func2()中则使用的是局部变量count,而不是全局变量。这一点非常重要:如果全局变量和局部变量有相同的变量名称,则在声明了局部变量的函数中对这个相同变量名称的使用指的都是该局部变量,而不是全局变量;对这个局部变量的引用也不会影响全局变量。因此,同名的局部变量使得全局变量被隐藏了。
    局变量的初始化是在程序开始的时候进行的。如果全局变量在声明的时候有明确指定初始化值,则全局变量的初值就是这个值;否则,它的初值就是0.
    全局变量是被存储在代码区域之外的一个固定区域。当我们需要多个函数使用同一个数据的时候,或者当我们需要一个变量在程序的整个运行阶段都保有其值的时候,全局变量就显得很有用了。但是,基于下面的三个原因,我们应该尽量避免使用不必要的全局变量:
    1. 全局变量在程序运行的整个阶段都是占有内存空间的,而不仅是在需要的时候。
    2. 在使用局部变量就可以满足要求的地方使用全局变量会降低函数的独立性,因为这样做使得函数依赖于自身之外的东西了。
    3. 使用大量的全局变量会导致程序出现未明的的错误和预料之外的副作用。在开发大型程序的过程中,一个主要的问题就是在程序的其它地方对变量的错误修改。如果我们在程序中使用了过多的全局变量,这样的事情就有可能发生。
练习:
    1. 局部变量和全局变量的主要区别是什么?
    2. 局部变量是否可以在代码块中的任何地方进行声明?
    3. 局部变量是否会在声明它的函数被多次调用之间保有其值?
   

原创粉丝点击