全局变量和静态变量区别

来源:互联网 发布:淘宝店铺如何添加商品 编辑:程序博客网 时间:2024/05/16 17:21
存储的地方是一样的,不同之处在于它们的作用域不同: 
全局变量基本上在程序的任何地方都能被看到 
而静态局部变量只能在其指定的范围内被使用 

比如 

int   i   ;     //   全局变量 

class   C 

public: 
        static   int   i_C;     //   静态局部变量 


void   main() 

        i   =   1;                 //   合法 
        i_C   =   1;             //   错误 
        C::i_C   =   1;       //   合法 
        
        C   cc; 
        cc.i_C   =   2;     //   合法 

}


全局变量具有外部连接性,即同一工程中其它文件中的也可引用。 
而静态变量不具有外部连接性,即同一工程中其它文件中不可以引用。 
如: 
//cpp1.cpp 
extern   int   x=10; 
static   int   y=5; 

//cpp2.cpp 
#include   <iostream.h> 
void   main() 

        extern   int   x; 
        extern   int   y; 
        cout < <x < <endl; 
        cout < <y < <endl; 

将这两个文件放在同一工程中,你发现每一文件单独编译能通过,但作为工程不能构成.exe文件运行。若将有关变量y的行注释后(或将static换成extern)就可以了。这是因为静态变量的作用域在本文件内,不能扩充到其它文件。其作用是当多人合作开发一个工程时,仅在自己的文件内使用的全局变量用静态变量不会与其他人用的变量相混淆,这就是标识符的一致性。



变量可以分为全局变量、静态全局变量、静态局部变量和局部变量 
按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 
按作用域分:全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。 

全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。 
代码如下: 
//test.cpp 
#include   <iostream.h> 
extern   int   a;//变量声明,不是定义 
static   int   b=5; 
void   func1() 

    cout < <b < <endl < <a < <endl;//结果为5 


//main.cpp 
int   a; 
int   b=10; 
void   func2() 

    static   int   i; 
    i++; 
    cout < <i < <endl; 


void   func1(); 

void   main() 

    a=20; 
    func1(); 
    func2(); 
    func2(); 

输出结果为 

20 

2