C++全局变量和局部变量详解

时间:2022-12-27 10:29:19

程序中的变量由于定义的位置不同,在程序中的可见程度是不一样的。所谓“可见”,指的是定义的这个变量可以被使用。

一.变量的存储机制与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;
}