国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

C++教程:C++變量的作用域

2020-05-23 14:28:37
字體:
供稿:網(wǎng)友
在程序的不同位置,可能會(huì)聲明各種不同類型(這里指靜態(tài)或非靜態(tài))的變量。然而,聲明的位置不同、類型不同導(dǎo)致每個(gè)變量在程序中可以被使用的范圍不同。我們把變量在程序中可以使用的有效范圍稱為變量的作用域

任何變量都必須在聲明之后才能被使用,所以一切變量的作用域都始于變量的聲明之處。那么,它到什么地方終止呢?我們知道C++的程序是一個(gè)嵌套的層次結(jié)構(gòu),即語句塊里面還能有語句塊。最終語句塊由各條語句組成,而語句就是程序中的最內(nèi)層,是組成程序的一個(gè)最小語法單位。在某一層次聲明的變量的作用域就終止于該變量所在層次的末尾。

舉個(gè)例子來說明:
#include "iostream.h" 
int main()
{
   int a=3,b=4;//變量a和b的作用域開始
   for (int i=0;i<5;i++)//在for語句內(nèi)聲明的變量i的作用域開始
   {
      int result=i;//變量result的作用域開始
      if (int j=3)//在if語句內(nèi)聲明的變量j的作用域開始
      {
         int temp=8;//變量temp的作用域開始
         result=temp+(a++)-(b--);
      }//變量temp的作用域結(jié)束
      else
         result=2;//if……else語句結(jié)束,變量j的作用域結(jié)束
      cout <<result <<endl;
   }//for語句結(jié)束,變量i和result的作用域結(jié)束
   return 0;
}//變量a和b的作用域結(jié)束

根據(jù)上面這段程序,我們發(fā)現(xiàn)每當(dāng)一個(gè)語句塊或語句結(jié)束,那么在該語句塊或語句層次內(nèi)聲明變量的作用域也就結(jié)束了。所以,下面的這段程序就存在錯(cuò)誤:
#include "iostream.h"
int main()
{
   int a=3,b=4;
   for (int i=0;i<5;i++)
   {
      int result=i;
      if (int j=3)
      {
         int temp=8;
         result=temp+(a++)-(b--);
      }
      else
         result=2;
      cout <<j <<result <<endl;//j的作用域結(jié)束,變量未定義
   }
   cout <<result <<endl; //result的作用域結(jié)束,變量未定義
   cout <<i <<endl;//這里居然是正確的,為什么呢?
   return 0;
}
變量j和result無法輸出是在意料之中的,但是為什么明明變量i的作用域已經(jīng)結(jié)束了,卻還是能夠正常輸出呢?這是微軟給我們開的一個(gè)玩笑。根據(jù)ANSI C++的標(biāo)準(zhǔn),在for語句頭中聲明的變量的作用域的確應(yīng)該在for語句的末尾結(jié)束。然而VC++卻沒有完全符合這個(gè)標(biāo)準(zhǔn),它認(rèn)為for語句頭中聲明的變量作用域到包含該for語句的最小語句塊結(jié)束。盡管如此,我們還是應(yīng)該按照ANSI C++標(biāo)準(zhǔn)來認(rèn)知變量的作用域。 
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 驻马店市| 延川县| 佳木斯市| 峡江县| 新巴尔虎右旗| 高尔夫| 大连市| 永登县| 黑水县| 新昌县| 吴桥县| 平塘县| 平南县| 万山特区| 获嘉县| 桂平市| 怀集县| 湛江市| 林口县| 南岸区| 临沂市| 濮阳市| 论坛| 阜南县| 托里县| 常山县| 台中市| 博爱县| 昆山市| 涞源县| 宜宾市| 广东省| 德州市| 萝北县| 平安县| 四会市| 贵南县| 陇西县| 台东市| 嘉祥县| 屏南县|