国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 新昌县| 宜城市| 南溪县| 绥宁县| 淮北市| 彰化县| 汉中市| 水城县| 沛县| 沛县| 喀喇沁旗| 区。| 台南市| 平湖市| 溧水县| 满洲里市| 修武县| 汝阳县| 株洲县| 青岛市| 江门市| 湖南省| 尼玛县| 孙吴县| 武义县| 古蔺县| 翁牛特旗| 鄯善县| 阜南县| 临泉县| 诏安县| 泌阳县| 合肥市| 肇东市| 乌兰浩特市| 江西省| 突泉县| 西青区| 巴楚县| 军事| 永平县|