描述一个人的生平,大底这么形容:哪儿的人,咋出生的,活了多久,行的多远。变量也是如此:内存分布,初始化,生命周期,作用域。

1.全局变量

  1. 内存分布:全局数据区
  2. 初始化:默认初始化
  3. 生命周期:程序运行期一直存在
  4. 作用域:全局作用域(全局变量只需在一个源文件中定义,就可以作用于所有的源文件。)其他文件中要使用必须用extern 关键字声明要引用的全局变量。
  5. 注意:如果在两个文件中都定义了相同名字的全局变量,连接出错:变量重定义

2. 静态变量

  1. 内存分布:全局数据区
  2. 初始化:只初始化一次,默认初始化
  3. 生命周期:程序运行期一直存在
  4. 作用域:只在本文件中!!!只要文件不互相包含,在两个不同的文件中是可以定义完全相同的两个静态变量的,它们是两个完全不同的变量
  5. *注意:static关键字,const 关键字

3. 静态局部变量

  1. 内存分布:全局数据区
  2. 初始化:只初始化一次,默认初始化
  3. 生命周期:程序运行期一直存在
  4. 作用域:函数(作用域)
#include<iostream>  
using namespace std;  

int cnt=1;  

void f(){  
    static int test = cnt;  
    cout<<test<<endl;  
    cnt++;  
}  

int main(){  
    f();  
    f();  
    f();  
    cout<<cnt<<endl;  
    return 0;  
}

输出结果:
1
1
1
4

#include<iostream>  
using namespace std;  

int cnt=1;  

void f(){  
    static int test;  
    test = cnt;  
    cout<<test<<endl;  
    cnt++;  
}  

int main(){  
    f();  
    f();  
    f();  
    cout<<cnt<<endl;  
    return 0;  
}

输出结果:
1
2
3
4

4. 局部变量

  1. 内存分布:
  2. 初始化:必须初始化!!!
  3. 生命周期:函数(作用域)结束时
  4. 作用域:函数(作用域)内