溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

iOS開(kāi)發(fā)篇——C++變量屬性介紹

發(fā)布時(shí)間:2020-06-26 22:10:08 來(lái)源:網(wǎng)絡(luò) 閱讀:536 作者:崔亞允 欄目:移動(dòng)開(kāi)發(fā)

藍(lán)鷗iOS培訓(xùn)講師推薦:在技術(shù)的領(lǐng)域里沒(méi)有懶這么一說(shuō),沒(méi)有學(xué)不會(huì)這么一說(shuō),只要你自己努力就沒(méi)什么太大問(wèn)題。

變量除了數(shù)據(jù)類(lèi)型以外,還有3種屬性:

1、存儲(chǔ)類(lèi)別 C++允許使用auto,static,register和extern 4種存儲(chǔ)類(lèi)別

2、作用域 指程序中可以引用該變量的區(qū)域

3、存儲(chǔ)期 指變量在內(nèi)存的存儲(chǔ)期限

上面這介紹的這些3種屬性是有關(guān)系的,程序設(shè)計(jì)者只能聲明變量的存儲(chǔ)類(lèi)別,通過(guò)存儲(chǔ)類(lèi)別可以確定變量的作用域和存儲(chǔ)期

但是大家一定要注意存儲(chǔ)類(lèi)別的用法auto, static和register 3種存儲(chǔ)類(lèi)別只能用于變量的定義語(yǔ)句中,如:

auto char c; //字符型自動(dòng)變量,在函數(shù)內(nèi)定義

static int a;//靜態(tài)局部整型變量或靜態(tài)外部整型變量

register int d; //整型寄存器變量,在函數(shù)內(nèi)定義

extern int b;//聲明一個(gè)已定義的外部整型變量

重點(diǎn)說(shuō)明: extern只能用來(lái)聲明已定義的外部變量,而不能用于變量定義,只要看到extern,就能夠判斷變量聲明,而不是定義變量語(yǔ)句。

下面是不同角度的分析:

1、從作用域角度分,有局部變量和全局變量,它們采用的存儲(chǔ)類(lèi)別如下:

1)局部變量

自動(dòng)變量,即動(dòng)態(tài)局部變量(離開(kāi)函數(shù),值就消失)

靜態(tài)局部變量(離開(kāi)函數(shù),值仍保留)

寄存器變量(離開(kāi)函數(shù),值就消失)

形式參數(shù)(可以定義為自動(dòng)變量或寄存器變量)

2)全局變量

靜態(tài)外部變量(只限本文件引用)

外部變量(即非靜態(tài)的外部變量,允許其他文件引用)

2、從變量存儲(chǔ)期(存在的時(shí)間)來(lái)區(qū)分,有動(dòng)態(tài)存儲(chǔ)和靜態(tài)存儲(chǔ)兩種類(lèi)型,靜態(tài)存儲(chǔ)是程序整個(gè)運(yùn)行時(shí)間都存在,而動(dòng)態(tài)存儲(chǔ)則是在調(diào)用函數(shù)時(shí)臨時(shí)分配單元。

1)動(dòng)態(tài)存儲(chǔ)

自動(dòng)變量(本函數(shù)內(nèi)有效)

寄存器變量(本函數(shù)內(nèi)有效)

形式參數(shù)

2)靜態(tài)存儲(chǔ)

靜態(tài)局部變量(函數(shù)內(nèi)有效)

靜態(tài)外部變量(本文件內(nèi)有效)

外部變量(其他文件可引用)

3、從變量值存放的位置??煞譃?/p>

1)內(nèi)存中靜態(tài)存儲(chǔ)區(qū)

靜態(tài)局部變量

靜態(tài)外部變量(函數(shù)外部靜態(tài)變量)

外部變量(可為其他文件引用)

2)內(nèi)存中動(dòng)態(tài)存儲(chǔ)區(qū):  自動(dòng)變量和形式參數(shù)

3)CPU 中的寄存器: 寄存器變量

4、關(guān)于作用域和存儲(chǔ)期的概念,從前面敘述可以知道,對(duì)一個(gè)變量的性質(zhì)可以從兩個(gè)方面分析,一是從變量的作用域,一是從變量值存在時(shí)間的長(zhǎng)短,即存儲(chǔ)期,前者是從空間的角度,后者是從時(shí)間的角度,二者有關(guān)系,但是有不同的意義,如下圖:

 iOS開(kāi)發(fā)篇——C++變量屬性介紹

作用域的示意圖

 iOS開(kāi)發(fā)篇——C++變量屬性介紹

存儲(chǔ)期的示意圖

如果一個(gè)變量在某個(gè)文件或函數(shù)范圍內(nèi)是有效的,那么這個(gè)文件或函數(shù)稱為該變量的作用域,在該作用域內(nèi)能夠引用該變量的,所以又稱變量在此作用域內(nèi)“可見(jiàn)”,這種性質(zhì)又稱為變量的可見(jiàn)性,在“作用域的示意圖”中變量a、b在函數(shù)f1中能看到。

如果一個(gè)變量值在某一時(shí)刻是存在的,那么就認(rèn)為這一時(shí)刻屬于該變量的存儲(chǔ)期,或稱該變量在此時(shí)刻“存在”

可以看到自動(dòng)變量和寄存器變量在函數(shù)內(nèi)的可見(jiàn)性和存在性是一致的,在函數(shù)外的可見(jiàn)性和存在性也是一致的,靜態(tài)局部變量在函數(shù)外的可見(jiàn)性和存在性不一致,靜態(tài)外部變量和外部變量的可見(jiàn)性和存在性是一致的。

5、static聲明使變量采用靜態(tài)存儲(chǔ)方式,不過(guò)它對(duì)全局變量和局部變量有不同的作用,對(duì)局部變量而言,staic使動(dòng)態(tài)存儲(chǔ)方式改為靜態(tài)存儲(chǔ)方式,而對(duì)于全局變量而言,它又使變量局部化(局部于本文件),不過(guò)仍是靜態(tài)存儲(chǔ)方式,從作用域角度而言,只要是有static聲明的,那么它的作用域都是局限的,可能只局限于本函數(shù)內(nèi)(靜態(tài)局部變量),也有可能局限于本文件內(nèi)(靜態(tài)外部變量)

本節(jié)課和大家說(shuō)的有點(diǎn)多,不過(guò)理解起來(lái)應(yīng)該不是很復(fù)雜,大家可以試著先理解一下,整理出來(lái)一個(gè)思路,如果有不懂的地方可隨時(shí)溝通!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI