描述一个人的生平,大底这么形容:哪儿的人,咋出生的,活了多久,行的多远。变量也是如此:内存分布,初始化,生命周期,作用域。
1.全局变量
- 内存分布:全局数据区
- 初始化:默认初始化
- 生命周期:程序运行期一直存在
- 作用域:全局作用域(全局变量只需在一个源文件中定义,就可以作用于所有的源文件。)其他文件中要使用必须用extern 关键字声明要引用的全局变量。
- 注意:如果在两个文件中都定义了相同名字的全局变量,连接出错:变量重定义
2. 静态变量
- 内存分布:全局数据区
- 初始化:只初始化一次,默认初始化
- 生命周期:程序运行期一直存在
- 作用域:只在本文件中!!!只要文件不互相包含,在两个不同的文件中是可以定义完全相同的两个静态变量的,它们是两个完全不同的变量
- *注意:static关键字,const 关键字
3. 静态局部变量
- 内存分布:全局数据区
- 初始化:只初始化一次,默认初始化
- 生命周期:程序运行期一直存在
- 作用域:函数(作用域)
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
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. 局部变量
- 内存分布:栈
- 初始化:必须初始化!!!
- 生命周期:函数(作用域)结束时
- 作用域:函数(作用域)内