您好,登錄后才能下訂單哦!
藍(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)系,但是有不同的意義,如下圖:
作用域的示意圖
存儲(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í)溝通!
免責(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)容。