程序中的变量由于定义的位置不同,在程序中的可见程度是不一样的。所谓“可见”,指的是定义的这个变量可以被使用。
一.变量的存储机制与C++的内存布局
要了解程序中使用变量的属性,必须先了解变量的存储机制。
操作系统为一个C++程序的运行所分配的内存分为四个区域,如下图所示:
图 程序运行时内存空间的分配
二.全局变量
在所有函数之外定义的变量称为“全局变量”。
- 全局变量在编译时建立在全局数据区,在未给出初始化值时系统自动初始化为0。
- 全局变量在其所在的程序文件中任何函数中都是可见(可以访问)的。
举例:【例3.5】 多个函数使用全局变量的例子。
#include<iostream>
using namespace std;
int n=100;
void func(){
n*=2;
}
int main(){
n*=2;
cout<<n<<endl;
func();
cout<<n<<endl;
return 0;
}
三.局部变量
定义在函数内或块内的变量称为“局部变量”。
- 局部变量在程序运行到它所在的块时建立在栈中,该块执行完毕局部变量占有的空间即被释放。
- 局部变量在定义时可加修饰词auto,但通常省略。局部变量在定义时若未初始化,其值为随机数。
- 程序中使用的绝大多数变量都是局部变量。
举例:【例3.6】 使用局部变量的例子。(查看动画演示)
#include<iostream>
using namespace std;
void fun(){
auto int t=5; // fun()中的局部变量,auto可省略
cout<<"fun()中的t="<<t<<endl;
}
int main(){
float t=3.5; //main()函数中的局部变量
cout<<"main()中的t="<<t<<endl;
fun();
cout<<"main()中的t="<<t<<endl;
return 0;
}