细说C++全局变量、局部变量和静态局部变量

2020-01-06 12:05:10丽君

}

运行结果:
Running make number...
Running calculate...
Running output...
48
Running make number...
Running calculate...
Running output...
47
Running make number...
Running calculate...
Running output...
24
Running make number...
Running calculate...
Running output...
90
以上为某次运行得到的随机结果。可见,使用全局变量使得多个函数之间可以共享一个数据,同时从理论上实现了函数之间的通讯。 

静态局部变量

全局变量实现了函数之间共享数据,也使得变量不再会因为某个函数的结束而消亡。但是,新问题又出现了:一个密码检测函数根据调用(用户输错密码)的次数来限制他进入系统。如果把调用次数存放在一个局部变量里,显然是不可行的。虽然全局变量可以记录一个函数的运行次数,但是这个变量是被所有函数共享的,每个函数都能修改它,实在很危险。我们现在需要的是一个函数运行结束后不会消失的,并且其他函数无法访问的变量。

C++中,我们可以在函数体内声明一个静态局部变量(Static Local Variable)。它在函数运行结束后不会消失,并且只有声明它的函数中能够使用它。声明一个静态局部变量的方法是在声明局部变量前加上static,例如:
    static int a;
和全局变量类似,如果我们没有对一个静态局部变量做初始化,则编译器会自动将它初始化为0。

下面,我们就用静态局部变量来模拟一下这个密码检测函数的功能:(程序11.1.2)
#include "iostream.h"
#include "stdlib.h"
bool password();//密码检测函数
int main()
{
   do
   {
   }
   while (password()!=true);//反复检测密码直到密码正确
   cout <<"欢迎您进入系统!" <<endl;
   return 0;
}
bool password()
{
   static numOfRun=0;//声明静态局部变量存放函数调用次数
   if (numOfRun<3)
   {
      int psw;
      cout <<"第" <<++numOfRun <<"次输入密码" <<endl;
      cin >>psw;
      if (psw==123456)
      {
         return true;
      } 
      else
      {
         cout <<"密码错误!" <<endl;
         return false;
      }
   }
   else
   {
      cout <<"您已经输错密码三次!异常退出!" <<endl;