最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析C++各種變量及區(qū)別

 更新時(shí)間:2022年05月10日 09:15:47   作者:三貝勒文子  
在日常開(kāi)發(fā)中,我們經(jīng)常使用變量,常量,變量可以分為:全局變量、局部變量、靜態(tài)全局變量、靜態(tài)局部變量,接下來(lái)通過(guò)本文給大家介紹C++各種變量及區(qū)別,感興趣的朋友一起看看吧

在日常開(kāi)發(fā)中,我們經(jīng)常使用變量,常量,像下面的代碼:

int ser_1;             // 全局變量
const int ser_2;       // 全局常量
static int ser_3;      // 靜態(tài)變量
void main(){
  int serven_1;             // 局部變量
  const int serven_2;       // 局部常量
  static int serven_3;      // 局部靜態(tài)變量
  func(serven_1);
}
void func(int para){      // 形參
  int a;
}

上面的一小段代碼涵蓋了變量、常量和靜態(tài)變量,并且均定義了全局和局部。這些是我們經(jīng)常使用到的定義變量的方式,但是你知道它們的區(qū)別嗎?它們的作用域又是什么?它們的在內(nèi)存中又是怎么樣存放的?

一、分類

變量可以分為:全局變量、局部變量、靜態(tài)全局變量、靜態(tài)局部變量;

在C++的內(nèi)存管理機(jī)制中,全局變量、靜態(tài)全局變量和靜態(tài)局部變量均存放在靜態(tài)存儲(chǔ)區(qū)域,局部變量存放在棧中,全局變量和靜態(tài)變量如果在定義的時(shí)候沒(méi)有初始化,那么編譯器會(huì)將這些變量初始化為0。

二、作用域

作用域表示一個(gè)變量在使用過(guò)程中的范圍,也就是在某個(gè)范圍內(nèi),變量可以正常使用,出了這個(gè)范圍,變量就失效了。

局部變量的作用域:局部變量的作用域在于函數(shù)體內(nèi)部,出了函數(shù)的范圍就是用不了了,像上述代碼中的serven_1變量,只能在main函數(shù)中使用,出了main函數(shù)就使用不了。形參變量屬于被調(diào)函數(shù)的局部變量,實(shí)參屬于主調(diào)函數(shù)的局部變量。不同的函數(shù)可以使用一模一樣的符號(hào)來(lái)定義變量,雖然符號(hào)一樣,但是它們實(shí)際上是不相同的。像下面的代碼,兩個(gè)函數(shù)的符號(hào)serven_1都不一樣,一個(gè)是int類型,一個(gè)是char類型。

void func_1(){
  int serven_1 = 2;
}
void func_2(){
  char serven_1 = 's';
}

全局變量的作用域:全局變量的作用域不屬于某一個(gè)函數(shù),它屬于一個(gè)源程序文件,作用域是整個(gè)源程序,當(dāng)需要在某個(gè)函數(shù)里面使用全局變量時(shí),需要做聲明,一般使用extern來(lái)做聲明。當(dāng)然啦,在同一個(gè)文件中就不需要做extern聲明。全局變量和局部變量可以用相同的符號(hào)來(lái)定義,在定義局部變量的函數(shù)體中,如果使用了該符號(hào)則認(rèn)為是局部變量,像下面的代碼中,在函數(shù)func中使用serven_1時(shí)用的是局部變量。

int serven_1;        // 全局變量,未初始化時(shí)則編譯器默認(rèn)其為0
?
void func(){
  int serven_1 = 3;
  std::cout<<serven_1<<std::endl;        // 這里打印的是3
}

三、存儲(chǔ)區(qū)域

在C++的內(nèi)存管理機(jī)制中,將整個(gè)存儲(chǔ)區(qū)分為以下幾塊地方:代碼區(qū)域(CODE)、常量區(qū)域(TEXT)、BSS區(qū)域、DATA區(qū)域、堆(HEAP)、棧(STACK)。

  • 棧(STACK):由編譯器進(jìn)行管理,自動(dòng)分配和釋放,存放函數(shù)調(diào)用過(guò)程中的各種參數(shù)、局部變量、返回值以及函數(shù)返回地址。操作方式類似數(shù)據(jù)結(jié)構(gòu)中的棧。
  • 堆(HEAP):用于程序動(dòng)態(tài)申請(qǐng)分配和釋放空間。C語(yǔ)言中的malloc和free,C++中的new和delete均是在堆中進(jìn)行的。正常情況下,程序員申請(qǐng)的空間在使用結(jié)束后應(yīng)該釋放,若程序員沒(méi)有釋放空間,則程序結(jié)束時(shí)系統(tǒng)自動(dòng)回收。注意:這里的“堆”并不是數(shù)據(jù)結(jié)構(gòu)中的“堆”。
  • 全局(靜態(tài))存儲(chǔ)區(qū):分為DATA段和BSS段。DATA段(全局初始化區(qū))存放初始化的全局變量和靜態(tài)變量;BSS段(全局未初始化區(qū))存放未初始化的全局變量和靜態(tài)變量。程序運(yùn)行結(jié)束時(shí)自動(dòng)釋放。其中BBS段在程序執(zhí)行之前會(huì)被系統(tǒng)自動(dòng)清0,所以未初始化的全局變量和靜態(tài)變量在程序執(zhí)行之前已經(jīng)為0。
  • 文字常量區(qū)(TEXT):存放常量字符串。程序結(jié)束后由系統(tǒng)釋放。
  • 程序代碼區(qū)(CODE):存放程序的二進(jìn)制代碼。

在C/C++中,定義全局變量和局部變量時(shí)。全局變量(外部變量和靜態(tài)變量),均是保存在全局存儲(chǔ)區(qū)中,占用永久性的存儲(chǔ)單元;局部變量(自動(dòng)變量),保存在棧中,只有在所在函數(shù)被調(diào)用時(shí)才由系統(tǒng)動(dòng)態(tài)在棧中分配臨時(shí)性的存儲(chǔ)單元。

變量存儲(chǔ)區(qū)域分為動(dòng)態(tài)存儲(chǔ)區(qū),靜態(tài)存儲(chǔ)區(qū),寄存器存儲(chǔ)區(qū);其中寄存器存儲(chǔ)也屬于動(dòng)態(tài)分配。
靜態(tài)存儲(chǔ)變量通常是在變量定義時(shí)就分配存儲(chǔ)單元并一直保持不變, 直至整個(gè)程序結(jié)束;動(dòng)態(tài)存儲(chǔ)變量是在程序執(zhí)行過(guò)程中,使用它時(shí)才分配存儲(chǔ)單元, 使用完畢立即釋放。

在C/C++語(yǔ)言中,對(duì)變量的存儲(chǔ)類型說(shuō)明有以下四種:
auto:自動(dòng)變量
register:寄存器變量(存儲(chǔ)在CPU寄存器中,寄存器運(yùn)算速度遠(yuǎn)高于內(nèi)存)
extern:外部變量
static:靜態(tài)變量

 自動(dòng)變量和寄存器變量屬于動(dòng)態(tài)存儲(chǔ)方式, 外部變量和靜態(tài)變量屬于靜態(tài)存儲(chǔ)方式。在介紹了變量的存儲(chǔ)類型之后,可以知道對(duì)一個(gè)變量的說(shuō)明不僅應(yīng)說(shuō)明其數(shù)據(jù)類型,還應(yīng)說(shuō)明其存儲(chǔ)類型。因此變量說(shuō)明的完整形式應(yīng)為:

存儲(chǔ)類型說(shuō)明符 數(shù)據(jù)類型說(shuō)明符 變量名,變量名…;

例如:

static int ser_1,ser_2;     // 說(shuō)明ser_1,ser_2為靜態(tài)類型變量
auto char ser_3,ser_4;      // 說(shuō)明ser_3,ser_4為自動(dòng)字符變量
static int ser_5[5]={1,1,1};  // 說(shuō)明ser_5為靜整型數(shù)組
extern int ser_6, ser_7;     // 說(shuō)明ser_6, ser_7為外部整型變量。

自動(dòng)型變量存放在堆棧區(qū)中。堆棧區(qū)也是內(nèi)存中一部分,該部分內(nèi)存在程序運(yùn)行中是重復(fù)使用的。堆區(qū)域一般是程序員我們自己來(lái)申請(qǐng)和釋放的,像malloc申請(qǐng)內(nèi)存;棧區(qū)域是編譯器自動(dòng)來(lái)管理的,像調(diào)用函數(shù)的形參變量和局部變量。

四、總結(jié)

1、全局變量的作用域是全局的(整個(gè)程序的),該變量只需要在其中的一個(gè)源程序文件定義,在其他的源文件中如果要使用到,就在變量的前面加上外部聲明extern就可以使用了;

2、靜態(tài)全局變量的生命周期是整個(gè)程序,只要程序沒(méi)有停止,那么該變量都是占據(jù)著內(nèi)存空間,但是它的作用域僅限于當(dāng)前的源文件,這是它跟全局變量的區(qū)別就是全局變量在其他的源文件也是可以使用的;

3、靜態(tài)局部變量的生命周期是整個(gè)程序,只要程序沒(méi)有停止,那么該變量都是一直占據(jù)著內(nèi)存空間,但是它的作用域僅限于定義它的函數(shù)體中;

4、局部變量的作用域是局部的,它也是auto自動(dòng)變量,當(dāng)函數(shù)執(zhí)行完成,該變量就會(huì)被撤銷,內(nèi)存也被收回,存儲(chǔ)在??臻g中;

5、為了降低模塊間的耦合度,一般會(huì)盡可能地使用靜態(tài)全局變量而不是全局變量;

6、為了降低模塊間的耦合度,一般會(huì)盡可能地使用靜態(tài)局部變量而不是靜態(tài)全局變量;

到此這篇關(guān)于解析C++各種變量及區(qū)別的文章就介紹到這了,更多相關(guān)C++各種變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言break和continue的語(yǔ)句用法

    C語(yǔ)言break和continue的語(yǔ)句用法

    這篇文章主要介紹了C語(yǔ)言break和continue的語(yǔ)句用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 淺析C/C++ 中return *this和return this的區(qū)別

    淺析C/C++ 中return *this和return this的區(qū)別

    return *this返回的是當(dāng)前對(duì)象的克隆或者本身,return this返回當(dāng)前對(duì)象的地址,下面通過(guò)本文給大家介紹C/C++ 中return *this和return this的區(qū)別,感興趣的朋友一起看看吧
    2019-10-10
  • 使用C++和Crypto++庫(kù)實(shí)現(xiàn)AES加密與解密

    使用C++和Crypto++庫(kù)實(shí)現(xiàn)AES加密與解密

    在這篇博客中,我們將深入探討如何利用C++和Crypto++庫(kù)實(shí)現(xiàn)高效且安全的AES加密與解密機(jī)制,Crypto++是一款高度認(rèn)可的免費(fèi)C++類庫(kù),文中通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-01-01
  • 基于C++實(shí)現(xiàn)的哈夫曼編碼解碼操作示例

    基于C++實(shí)現(xiàn)的哈夫曼編碼解碼操作示例

    這篇文章主要介紹了基于C++實(shí)現(xiàn)的哈夫曼編碼解碼操作,結(jié)合實(shí)例形式分析了C++實(shí)現(xiàn)的哈夫曼編碼解碼相關(guān)定義與使用技巧,需要的朋友可以參考下
    2018-04-04
  • 用C語(yǔ)言模仿Python函數(shù)的一種簡(jiǎn)單實(shí)現(xiàn)方法

    用C語(yǔ)言模仿Python函數(shù)的一種簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要介紹了用C語(yǔ)言模仿Python函數(shù)的一種簡(jiǎn)單實(shí)現(xiàn)方法,需要的朋友可以參考下
    2017-05-05
  • C語(yǔ)言中g(shù)etchar()的原理以及易錯(cuò)點(diǎn)解析

    C語(yǔ)言中g(shù)etchar()的原理以及易錯(cuò)點(diǎn)解析

    用getchar()函數(shù)讀取字符串時(shí),字符串會(huì)存儲(chǔ)在輸入緩沖區(qū)中,包括輸入的回車字符,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中g(shù)etchar()的原理以及易錯(cuò)點(diǎn)解析的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • C++基于遞歸和非遞歸算法求二叉樹(shù)鏡像的方法

    C++基于遞歸和非遞歸算法求二叉樹(shù)鏡像的方法

    這篇文章主要介紹了C++基于遞歸和非遞歸算法求二叉樹(shù)鏡像的方法,針對(duì)二叉樹(shù)遍歷結(jié)合實(shí)例形式分析了遞歸與非遞歸算法的實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2017-05-05
  • C++ Log日志類輕量級(jí)支持格式化輸出變量實(shí)現(xiàn)代碼

    C++ Log日志類輕量級(jí)支持格式化輸出變量實(shí)現(xiàn)代碼

    這篇文章主要介紹了C++ Log日志類輕量級(jí)支持格式化輸出變量實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2019-04-04
  • C++紅黑樹(shù)的底層實(shí)現(xiàn)機(jī)制詳解

    C++紅黑樹(shù)的底層實(shí)現(xiàn)機(jī)制詳解

    紅黑樹(shù)與AVL樹(shù)一樣,也是一種自平衡的二叉搜索樹(shù),它在每個(gè)結(jié)點(diǎn)上增加一個(gè)存儲(chǔ)位表示結(jié)點(diǎn)的顏色,可以是Red或Black,通過(guò)對(duì)任何一條從根到葉子的路徑上各個(gè)結(jié)點(diǎn)著色方式的限制,本文介紹了C++紅黑樹(shù)的底層實(shí)現(xiàn)機(jī)制,需要的朋友可以參考下
    2024-08-08
  • C++修煉之拷貝構(gòu)造函數(shù)

    C++修煉之拷貝構(gòu)造函數(shù)

    這篇文章主要內(nèi)容是6個(gè)默認(rèn)成員函數(shù)之一的拷貝構(gòu)造函數(shù)的認(rèn)識(shí)與學(xué)習(xí),讓同學(xué)們充分理解淺拷貝與深拷貝,感興趣的小伙伴可以參考閱讀
    2023-04-04

最新評(píng)論

建阳市| 巴彦淖尔市| 沁阳市| 香格里拉县| 厦门市| 慈溪市| 蓬溪县| 黄山市| 静宁县| 凌海市| 石城县| 凌源市| 手游| 嘉荫县| 灌阳县| 东平县| 巨野县| 麦盖提县| 河北省| 宜城市| 仁怀市| 新安县| 富蕴县| 吴江市| 宜春市| 扎赉特旗| 汾阳市| 莱芜市| 绥棱县| 安陆市| 镇雄县| 马边| 泰来县| 静宁县| 盘山县| 离岛区| 巨野县| 桂林市| 县级市| 获嘉县| 敦煌市|