亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

細說C++全局變量、局部變量和靜態局部變量

2020-05-23 14:28:40
字體:
來源:轉載
供稿:網友
我們已經在前面學習了變量,并且能夠熟練地使用它??墒?,僅僅靠這些知識,有些問題仍然無法得到解決。

標志符

首先要來介紹一下什么是標志符。在程序設計的過程中,經常要給變量、函數甚至是一些數據類型起名字(還包括以后的類名,對象名等)。我們把這些用戶根據一些規定,自己定義的各種名字統稱為標志符(Identifier)。顯然,標志符不允許和任何保留字相同。

全局變量和局部變量

在函數這一章節中,我們說過函數體內聲明的變量僅在該函數體內有效,別的函數是無法使用的。并且在函數運行結束后,這些變量也將消失了。我們把這些在函數體內聲明的變量稱為局部變量(Local Variable)。

然而,可能會遇到這樣的問題:我們想要創建一個變量作為數據緩沖區(Buffer),分別供數據生成、數據處理和數據輸出三個函數使用,三個函數都要能夠讀取或修改這個變量的值。顯然通過傳遞參數或返回值來解決這個問題是非常麻煩的。

那么,我們能否建立一個變量能夠讓這三個函數共同使用呢?在C++中,我們可以在函數體外聲明一個變量,它稱為全局變量(global variable)。所謂全局,是指對于所有函數都能夠使用。當然,在該變量聲明之前出現的函數是不知道該變量的存在的,于是也就無法使用它了。另外,如果我們聲明了一個全局變量之后沒有對它進行初始化操作,則編譯器會自動將它的值初始化為0。

下面,我們就用全局變量來實現剛才提出的那個問題:(程序11.1.1)
#include "iostream.h"
#include "stdlib.h"//用于產生隨機數,不必理會
#include "time.h"//用于產生隨機數,不必理會
#include "iomanip.h"//用于設置域寬
void makenum();
void output();
void cal();
int main()
{
   srand(time(NULL));//用于產生隨機數,不必理會
   for (int i=0;i<4;i++)
   {
      makenum();//產生隨機數放入緩沖區
     cal();//對緩沖區的數進行處理
      output();//輸出緩沖區的數值
   }
   return 0;
}
int buffer;//定義全局變量,以下函數都能使用它
void makenum()
{
   cout <<"Running make number..." <<endl;
   buffer=rand();//把產生的隨機數放入緩沖區
}
void cal()
{
   cout <<"Running calculate..." <<endl;
   buffer=buffer%100;
}
void output()
{
   cout <<"Running output..." <<endl;
   cout <<setw(2) <<buffer <<endl;
}

運行結果:
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;
      exit(0);//退出程序運行
   }
}
第一次運行結果:
第1次輸入密碼
111111
密碼錯誤!
第2次輸入密碼
222222
密碼錯誤!
第3次輸入密碼
0
密碼錯誤!
您已經輸錯密碼三次!異常退出!

第二次運行結果:
第1次輸入密碼
000000
密碼錯誤!
第2次輸入密碼
123456
歡迎您進入系統!

使用靜態局部變量可以讓函數產生的數據更長期更安全地存儲。如果一個函數運行和它以前的運行結果有關,那么一般我們就會使用靜態局部變量。  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一av网| 亚洲黄色在线观看| 国产精品99久久久久久久久久久久| 亚洲香蕉av在线一区二区三区| 久99九色视频在线观看| 69视频在线免费观看| 在线看福利67194| 亚洲自拍av在线| 亚洲成av人影院在线观看| 亚洲精品wwwww| 欧美成人免费一级人片100| 日韩在线播放一区| 精品视频在线播放| 欧美另类老女人| 日韩视频免费看| 国产精品三级美女白浆呻吟| 欧美久久精品午夜青青大伊人| 亚洲欧美日韩中文在线制服| 日韩欧美精品中文字幕| 亚洲电影免费在线观看| 欧美在线性爱视频| 日韩av一区二区在线观看| 在线日韩精品视频| 精品视频中文字幕| 不卡毛片在线看| 在线观看精品自拍私拍| 国产精品日日做人人爱| 欧美性猛交xxxxx水多| 一个色综合导航| 精品激情国产视频| 精品视频久久久久久久| 国产精品一区=区| 精品中文视频在线| 91视频免费在线| 久久久久国产精品免费网站| 亚洲人午夜精品| 国产精品一区二区久久| 亚洲人成在线播放| 日韩免费观看高清| 国产精品中文字幕久久久| 亚洲欧洲一区二区三区在线观看| 欧美午夜精品伦理| 久久久久久久av| 91亚洲精品视频| 亚洲影视九九影院在线观看| 欧美日韩在线视频一区| 国产99久久精品一区二区 夜夜躁日日躁| 欧美性少妇18aaaa视频| 欧美区在线播放| 国产精品国内视频| 日韩电影中文字幕一区| 国产精品视频一| 久久人人爽人人爽人人片av高清| 尤物九九久久国产精品的特点| 久久久国产精彩视频美女艺术照福利| 日韩在线播放视频| 蜜臀久久99精品久久久无需会员| 欧美午夜精品久久久久久人妖| 91精品国产高清久久久久久久久| 国产精品av电影| 亚洲综合大片69999| 亚洲综合av影视| 国产日本欧美在线观看| 色噜噜国产精品视频一区二区| 欧美性xxxx在线播放| 97精品免费视频| 亚洲视频精品在线| 亚洲色图五月天| 日韩在线观看电影| 人妖精品videosex性欧美| 91免费国产视频| 91国内免费在线视频| 午夜精品久久久久久久男人的天堂| 中文字幕不卡av| 中文字幕日韩av| 在线日韩日本国产亚洲| 韩国国内大量揄拍精品视频| 欧美精品videosex牲欧美| 亚洲在线观看视频网站| 亚洲欧美激情视频| 成人在线激情视频| 亚洲性日韩精品一区二区| 欧美成人精品激情在线观看| 久久久久久久久久久久久久久久久久av| 91手机视频在线观看| 黑人巨大精品欧美一区免费视频| 中国china体内裑精亚洲片| 亚洲天堂第二页| 亚洲欧洲视频在线| 日韩美女免费视频| 这里只有精品在线播放| 欧美超级乱淫片喷水| 欧美老女人性生活| 欧美日韩日本国产| 久久中文字幕一区| 成人午夜高潮视频| 亚洲成人黄色在线| 国产成人综合一区二区三区| 久久精品视频亚洲| 中文字幕自拍vr一区二区三区| 欧美日韩国产一区二区三区| 亚洲福利小视频| 欧美电影在线免费观看网站| 欧美电影免费在线观看| 日韩精品中文字幕在线播放| 51午夜精品视频| 久久亚洲精品国产亚洲老地址| 久久精品国产免费观看| 欧美性生交xxxxx久久久| 91久久久久久国产精品| 91精品国产综合久久香蕉922| 亚洲国产精品高清久久久| 亚洲精品自拍视频| 欧美精品国产精品日韩精品| 免费av一区二区| 国产在线999| 中文字幕日韩精品有码视频| 琪琪亚洲精品午夜在线| 久久久久久91| 亚洲国产欧美一区二区三区同亚洲| 91精品久久久久久久久| 国产一区二区色| 日韩激情av在线播放| 国产mv免费观看入口亚洲| 国产精品91一区| 最新中文字幕亚洲| 国产精品久久久久久久久久ktv| 亚洲人精品午夜在线观看| 97在线视频国产| 久久免费福利视频| 国产精品九九久久久久久久| 精品久久久一区二区| 88xx成人精品| 草民午夜欧美限制a级福利片| 欧美重口另类videos人妖| 欧美日韩免费在线| 国产精品小说在线| 国产精品高潮呻吟久久av黑人| 91精品国产综合久久久久久久久| 欧美精品aaa| 福利视频第一区| 亚洲一二在线观看| 日本久久久a级免费| 国产视频在线一区二区| 欧美日韩不卡合集视频| 91tv亚洲精品香蕉国产一区7ujn| 日韩精品免费综合视频在线播放| 亚洲品质视频自拍网| 国产成人免费av电影| 欧美性xxxxx极品娇小| 国产综合在线观看视频| 992tv成人免费视频| 在线精品91av| 中文字幕亚洲情99在线| 久久香蕉国产线看观看网| 日韩电影大全免费观看2023年上| 国内精品视频久久| 日韩在线观看免费| 国产91在线播放九色快色| 亚洲网址你懂得| 日韩av电影国产| 亚洲人高潮女人毛茸茸| 国产精品美女主播在线观看纯欲| 亚洲精品suv精品一区二区|