亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        C++語言變量的生命期與作用域的探討

        2016-03-17 05:28:06趙魁奎趙海廷
        關(guān)鍵詞:生命期語句靜態(tài)

        趙魁奎 趙海廷

        (1.寧波理工環(huán)境能源科技股份有限公司 浙江 寧波:315806;2.武昌理工學(xué)院 信息工程學(xué)院 湖北 武漢:430223)

        ?

        C++語言變量的生命期與作用域的探討

        趙魁奎1趙海廷2

        (1.寧波理工環(huán)境能源科技股份有限公司 浙江 寧波:315806;2.武昌理工學(xué)院 信息工程學(xué)院 湖北 武漢:430223)

        變量的生命期是變量從創(chuàng)建到消亡的時(shí)間段,也稱為變量的存在性,就是說一個(gè)變量是否還存在。變量的作用域是變量能被引用的范圍,也稱為變量的可見性,是指在變量存在的情況下能否被引用。一個(gè)變量若是可見的其必然存在,若其存在卻不一定就可見。主要討論了C++語言中變量的生命期、作用域、存在性及可見性等實(shí)際應(yīng)用的問題。

        生命期;作用域;存在性;可見性

        1 C++變量的生命期與作用域

        1.1 C++變量的生命期

        變量的生命期就是變量從創(chuàng)建到消亡的時(shí)間段。C++語言變量的生命期可分為靜態(tài)生命期和動(dòng)態(tài)生命期。

        如果變量的生命期與系統(tǒng)程序的運(yùn)行時(shí)段相同,則該變量就具有靜態(tài)的生命期。在所有大括號(hào)對(duì)之外定義的變量具有靜態(tài)生命期。若定義變量時(shí)在數(shù)據(jù)類型之前冠以“static”關(guān)鍵字的外部變量或局部變量也具有靜態(tài)生命期。

        在大括號(hào)對(duì)內(nèi)定義的變量其生命期從變量的定義點(diǎn)開始,結(jié)束于定義該變量所對(duì)應(yīng)大括號(hào)處,這種變量具有動(dòng)態(tài)生命期。

        變量的生命期也稱為變量的存在性;在其生命期期間,該變量必然是存在的即具有存在性。

        1.2 C++變量的作用域

        變量的作用域是變量能被引用的范圍。在變量的生存期間,每個(gè)變量都有各自的作用范圍,在各自的作用域內(nèi)、外,該變量可以是可見的,也可以是不可見的,也稱為變量的可見性。

        一個(gè)變量若存在,但它能否被引用,這是該變量的作用域問題。變量的作用域討論的是一個(gè)標(biāo)識(shí)符的有效引用范圍。

        C++語言變量的作用域可以分為:函數(shù)原型作用域,異常處理參數(shù)作用域,局部作用域,文件作用域、全局作用域和對(duì)象族作用域。

        (1)函數(shù)原型作用域

        所謂函數(shù)原型作用域就是在函數(shù)說明時(shí)形式參數(shù)的作用范圍。

        例如:double Area(double radius);

        其形參radius的作用范圍就在Area函數(shù)說明的小括號(hào)對(duì)內(nèi),在程序的其它地方將沒有意義,也就是變量radius的作用域就在Area函數(shù)的原型說明中。

        (2)異常處理參數(shù)作用域

        所謂異常處理參數(shù)作用域就是在異常處理時(shí),異常監(jiān)控段拋出異常對(duì)象后,異常處理程序段捕獲異常參數(shù)所具有的作用域。

        例如:

        try{……;cout?"9/0="?div(c,d)?endl;……;}

        catch(int){cout?"撲獲了除數(shù)為'0'異常!"?endl;}

        catch(…){……}

        上述try{……}監(jiān)控的程序段中,若有異常發(fā)生,將拋出異常對(duì)象,異常對(duì)象將在catch(……)段被捕獲,該異常參數(shù)具有的作用域就是異常參數(shù)作用域。

        (3)局部作用域

        定義在大括號(hào)對(duì)內(nèi)的變量稱為局部變量,一個(gè)局部變量具有局部于本塊的生命期和作用域;也就是局部變量的作用域從聲明變量處開始,一直到塊結(jié)束的大括號(hào)為止。

        如果一個(gè)局部變量定義為靜態(tài)的,該變量具有全局的生命期和局部于本塊的局部作用域。

        (4)全局作用域和文件作用域

        若一個(gè)變量在大括號(hào)對(duì)之外被聲明,該變量具有全局的生命期和全局的作用域。若是多文件系統(tǒng),通過extern說明,還可以在其它文件中引用。

        一個(gè)全局變量在定義時(shí),在其數(shù)據(jù)類型關(guān)鍵字前面冠以“static”關(guān)鍵字,這種變量的作用域開始于變量定義點(diǎn),結(jié)束于本文件,即該變量具有全局的生命期和本文件的作用域,也就是該變量只能在定義它的文件中引用。

        (5)對(duì)象族作用域

        在面向?qū)ο蟮腃++系統(tǒng)中,類的數(shù)據(jù)成員在創(chuàng)建該類的對(duì)象時(shí),該類的數(shù)據(jù)成員將被復(fù)制到各個(gè)對(duì)象之中,這些數(shù)據(jù)成員具有對(duì)象族作用域。

        靜態(tài)成員變量要在類內(nèi)進(jìn)行靜態(tài)變量的說明,在類外進(jìn)行靜態(tài)變量的初始化。該變量在該類的所有對(duì)象間只有一個(gè)拷貝,為所有對(duì)象共享;可以認(rèn)為靜態(tài)成員變量對(duì)該類族的所有對(duì)象具有生命期和作用域。

        2 C++語言程序的內(nèi)存空間分配

        C++語言程序在內(nèi)存中一般分為如下六個(gè)區(qū):

        (1)代碼區(qū):代碼區(qū)為程序代碼在內(nèi)存中的映射。

        (2)常量區(qū):常量、字符串等存放在該區(qū)。

        (3)初始化數(shù)據(jù)(data)區(qū):已經(jīng)初始化的變量的存儲(chǔ)區(qū)域,初始化了的全局變量和靜態(tài)變量存在該區(qū)域。

        (4)未初始化數(shù)據(jù)(BSS)區(qū):全局變量和靜態(tài)變量未初始化的存儲(chǔ)區(qū)域。未初始化的數(shù)據(jù)(BSS)區(qū)位于初始化數(shù)據(jù)區(qū)相鄰的一個(gè)區(qū)。

        (5)棧(stack)區(qū):臨時(shí)變量存儲(chǔ)區(qū)。進(jìn)程進(jìn)入該程序塊時(shí)為該局部變量分配內(nèi)存空間,退出塊時(shí)釋放該空間;函數(shù)的參數(shù)也存儲(chǔ)在該區(qū)域。

        (6)堆(heap)區(qū):動(dòng)態(tài)申請(qǐng)內(nèi)存分配存儲(chǔ)區(qū)。程序執(zhí)行new運(yùn)算符時(shí)申請(qǐng)存儲(chǔ)空間,執(zhí)行delete運(yùn)算符時(shí)釋放相應(yīng)的存儲(chǔ)空間。

        通常又將(3)和(4)區(qū)域稱為靜態(tài)存儲(chǔ)區(qū),5和6區(qū)域稱為動(dòng)態(tài)存儲(chǔ)區(qū)

        3 變量生命期和作用域的舉例

        下面給出闡述上述問題的實(shí)際應(yīng)用例子,它包括:File1.cpp、Jbjthshu.cpp和hshuMain.cpp三個(gè)文件。

        3.1 File1.cpp

        //File1.cpp

        #include

        int Iqjbl=123;//外部變量定義

        extern double Dqjbl;//外部全局變量的說明

        extern float Fstatic;//外部靜態(tài)全局變量說明

        void Display()//Display()函數(shù)定義

        {cout?"在Display()函數(shù)中,全局變量Dqjbl的值為:"?Dqjbl?endl;

        //cout?"在Display()函數(shù)中,靜態(tài)全局變量Fstatic的值為:"?Fstatic?endl;錯(cuò)誤

        }

        3.2 Jbjthshu.cpp

        //Jbjthshu.cpp

        #include

        void Jbjthshu(intx)

        {inty=0;//局部變量初始化

        static int Sjbjt=0;//局部靜態(tài)變量初始化

        Sjbjt++;//局部靜態(tài)變量后置加1運(yùn)算

        cout?"在Jbjthshu()函數(shù)中,函數(shù)參數(shù)x和局部變量y的值為:x="?x?",y="?y?endl;

        cout?"在Jbjthshu()函數(shù)中,局部靜態(tài)變量Sjbjt的值為:Sjbjt="?Sjbjt?endl;

        }

        3.3 hshuMain.cpp

        //hshuMain.cpp

        #include

        class Clock//時(shí)鐘類的聲明

        {public://公有成員函數(shù),外部公共接口

        //Clock類的構(gòu)造函數(shù)

        Clock(int NewH,int NewM,int NewS)

        {Hour=NewH;Minute=NewM;Second=NewS;}

        void ShowTime()//Clock類的成員函數(shù)

        {cout?"現(xiàn)在是"?Hour?"小時(shí)"?Minute?"分鐘"?Second?"秒鐘。"?endl;}

        //私有數(shù)據(jù)成員

        private: int Hour,Minute,Second;

        };

        extern Iqjbl;//外部變量的說明

        extern void Display();//外部函數(shù)的說明

        extern void Jbjthshu(int);//外部函數(shù)的說明

        double Dqjbl=12.345;//外部變量定義初始化

        //外部靜態(tài)變量的定義及初始化

        static float Fstatic=5.4321f;

        int div(intx, inty)//外部函數(shù)的定義

        {if (y==0) throwy;

        returnx/y;

        }

        void main()

        {cout?"在main()主函數(shù)中,全局變量Iqjbl的值為:"?Iqjbl?endl;//①

        cout?"在main()主函數(shù)中,靜態(tài)全局變量Fstatic的值為:"?Fstatic?endl;//②

        Display();//③外部函數(shù)的調(diào)用

        //④帶參外部函數(shù)的調(diào)用

        Jbjthshu(5);Jbjthshu(8);

        int sum=0;//sum定義為局部變量

        //⑤i定義為局部變量

        for(inti=1;i<11;i++) sum+=i;

        cout?"sum="?sum?endl;

        //局部變量定義

        inta=8,b=2,c=9,d=0,x=7,y=3;

        cout?"除數(shù)為零異常舉例 ";

        try//⑥異常監(jiān)控程序段

        {cout?"8/2="?div(a,b)?endl;

        cout?"9/0="?div(c,d)?endl;

        cout?"7/3="?div(x,y)?endl;

        }

        //異常捕獲程序段,int具有異常參數(shù)作用域

        catch(int )

        {cout?"撲獲了除數(shù)為'0'異常!"?endl;}

        //⑦輸出局部變量i的值

        cout?"i="?i?endl;

        cout?"對(duì)象當(dāng)前的時(shí)間是:";

        //⑧設(shè)置時(shí)間為:7:0:0

        Clock MyClock1(7,0,0);

        //調(diào)用MyClock1對(duì)象ShowTime()輸出時(shí)間

        MyClock1.ShowTime();

        }

        4 變量生命期和作用域舉例的說明

        在上述例子中:

        語句①引用的是File1.cpp文件的全局變量,要用“extern Iqjbl;”說明,也就是Iqjbl變量具有全局的存在性和全局的可見性。語句②引用的是本文件的靜態(tài)全局變量,在本文件中引用,不需要說明;但在File1.cpp文件中不能引用,即Fstatic變量具有全局的生命期,只具有所在文件的作用域;也就是Fstatic具有全局的存在性和本文件的可見性。語句①、②的輸出為:

        在main()主函數(shù)中,全局變量Iqjbl的值為:123

        在main()主函數(shù)中,靜態(tài)全局變量Fstatic的值為:5.4321

        語句③調(diào)用File1.cpp文件的函數(shù),需要“extern void Display();”語句進(jìn)行函數(shù)說明。在Display()函數(shù)中,調(diào)用了外部變量Dqjbl,要“extern double Dqjbl;”外部變量說明,但靜態(tài)全局變量Fstatic即使用“extern float Fstatic;”進(jìn)行了說明也不能進(jìn)行引用,其原因是該變量在其它文件中的可見性為不可見。該語句的輸出為:

        “在Display()函數(shù)中,全局變量Dqjbl的值為:12.345”。

        語句④兩次調(diào)用Jbjtbl()函數(shù),第1次調(diào)用Jbjthshu(5)函數(shù),輸出為:

        “在Jbjtbl()函數(shù)中,函數(shù)參數(shù)x和局部變量y的值為:x=5,y=0”

        “在Jbjtbl()函數(shù)中,局部靜態(tài)變量Sjbbl的值為:Sjbjt=1”。

        第2次調(diào)用Jbjthshu(8)函數(shù),輸出為:

        “在Jbjthshu()函數(shù)中,函數(shù)參數(shù)x和局部變量y的值為:x=8,y=0”

        “在Jbjthshu()函數(shù)中,局部靜態(tài)變量Sjbbl的值為:Sjbjt=2”。

        Jbjthshu()函數(shù)的形參x和函數(shù)的局部變量y都具有該函數(shù)的生命期和作用域,即它們?cè)谠摵瘮?shù)中有存在性和可見性。而局部靜態(tài)變量Sjbjt具有全局的生命期和局部的作用域,即Sjbjt具有全局的存在性和局部于該函數(shù)的可見性。

        語句⑤,在for語句中定義了局部變量i,其后通過“sum+=i;”進(jìn)行累加,sum的值輸出為:

        “sum=55”。

        語句⑥,通過try{……}實(shí)施對(duì)異常監(jiān)控,有異常發(fā)生時(shí),該監(jiān)控段拋出異常對(duì)象,由“catch(int )”對(duì)異常對(duì)象進(jìn)行捕獲,其catch(int )的參數(shù)就具有異常參數(shù)作用域,也就是該參數(shù)只有在該程序段才具有可見性。其輸出為:

        “除數(shù)為零異常舉例”

        “8/2=4”

        “撲獲了除數(shù)為'0'異常!”

        語句⑦,輸出局部變量i的值,其輸出值為:

        “i=11”

        此i是語句⑤在for語句中定義的局部變量,其生命期及作用域均從定義點(diǎn)開始到本局部的結(jié)束,也就是其存在性和可見性都是局部的。

        語句⑧,創(chuàng)建一個(gè)“Clock MyClock1(7,0,0);”對(duì)象,本語句將在MyClock1對(duì)象中設(shè)置其類中的數(shù)據(jù)成員“Hour、Minute和Second;”分別為:7:0:0。該類的數(shù)據(jù)成員“Hour、Minute和Second”具有類族的存在性和可見性。其輸出為:

        “對(duì)象當(dāng)前的時(shí)間是:現(xiàn)在是7小時(shí)0分鐘0秒鐘”。

        需要注意:

        (1)在hshuMain.cpp文件的main函數(shù)for(inti=1;i<11;i++)中的inti具有從定義點(diǎn)開始到本函數(shù)結(jié)束的生命期和作用域;但在Java語言中,i變量只具有本語句的生命期和作用域。

        (2)在Jbjthshu.cpp文件的Sjbjt具有全局的生命期和局部于Jbjthshu本函數(shù)的作用域。

        5 結(jié)束語

        變量或?qū)ο蟮拇嬖谛员砻饕粋€(gè)變量或?qū)ο笫欠翊嬖冢蛔兞炕驅(qū)ο蟮目梢娦詣t是指變量或?qū)ο蟠嬖诘那闆r下能否被引用;對(duì)于一個(gè)變量或?qū)ο蠖裕骸按嬖诘牟灰欢梢?,可見的一定存在”?/p>

        [1] 趙海廷等編著.C++引言程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2014.

        [2] 嚴(yán)運(yùn)國,趙海廷主編.C++程序設(shè)計(jì)基礎(chǔ)[M].北京:科學(xué)出版社,2005.

        [3] 趙海廷,嚴(yán)運(yùn)國主編.C++程序設(shè)計(jì)基礎(chǔ)導(dǎo)學(xué)[M].北京:科學(xué)出版社,2006.

        [4] 趙海廷主編.C++語言程序設(shè)計(jì)[M].北京:北京理工大學(xué)出版社,2009

        (責(zé)任編輯:李文英)

        Discussion of Life Cycle and Scope of C++ Language Variations

        Zhao Kuikui1Zhao Haiting2

        (1.Ningbo Ligong Environment and Energy Technology Co., LTD, Ningbo 315806, Zhejiang;2.Wuchang University of Technology, Wuhan 430223, Hubei)

        Life cycle of a variation is the period in which a variation is created and disappears; it is also called as the existence of a variation. A variation’s function is the scope in which it can be quoted, that is, the visibility of a variation, which means whether a variation is quoted in the period it exists. A visible variation does exist while an existing variation is not necessary visible. This paper mainly discusses the life cycle, scope, existence, and visibility of C++ language variations.

        life cycle; scope; existence; visibility

        2016-10-21

        2016-11-04

        趙魁奎(1981~),男,大學(xué),工程師.E-mail:28712870@qq.com

        TP312

        A

        1671-3524(2016)04-0037-04

        猜你喜歡
        生命期語句靜態(tài)
        靜態(tài)隨機(jī)存儲(chǔ)器在軌自檢算法
        重點(diǎn):語句銜接
        精彩語句
        冬季歐亞大陸反氣旋活動(dòng)特征及其與中國氣溫的關(guān)系
        飛行試驗(yàn)項(xiàng)目生命期研究
        機(jī)床靜態(tài)及動(dòng)態(tài)分析
        具7μA靜態(tài)電流的2A、70V SEPIC/升壓型DC/DC轉(zhuǎn)換器
        無線傳感器網(wǎng)絡(luò)最大生命期聚合樹路由算法*
        如何搞定語句銜接題
        智慧城市的全生命期評(píng)價(jià)和成本分析
        国产精品久久国产精麻豆99网站| 亚洲综合久久一本久道| 日韩av在线免费观看不卡| 中国亚洲一区二区视频| 日本乱偷人妻中文字幕| 日本动态120秒免费| 国产精品一区二区午夜久久 | 亚洲av色图一区二区三区| 亚洲人成无码区在线观看| 人人妻人人添人人爽日韩欧美| 国产呦系列视频网站在线观看 | 欧美一级视频在线| 免费在线亚洲视频观看| 胸大美女又黄的网站| 久久不见久久见免费视频7| 国产粉嫩高清| 顶级高清嫩模一区二区| 久久久久av无码免费网| 在线a免费观看| 久久99精品免费国产| 职场出轨的人妻中文字幕| 国产98在线 | 日韩| 中文字幕久热精品视频免费| 国产av一区二区日夜精品剧情| 免费大片黄国产在线观看| 99久久国产综合精品麻豆| 国产亚洲日韩AV在线播放不卡| 中文字幕日韩有码国产| 手机看片久久国产免费| 免费成人福利视频| 蜜桃成人精品一区二区三区| 精品亚洲国产成人蜜臀av| 久久人人爽人人爽人人片av麻烦| 无遮高潮国产免费观看韩国| 国产精品国产自产拍高清| 久久成人国产精品免费软件| 亚洲AV秘 无码一区二区三区臀| 麻豆成人久久精品二区三区91| 亚洲熟妇无码久久精品| 欧美极品美女| 久久免费精品视频老逼|