C語言基礎(chǔ)知識(shí)—變量的存儲(chǔ)類別
?。ㄗ兞恐荡鎯?chǔ)時(shí)間)動(dòng)態(tài)存儲(chǔ)方式,在程序運(yùn)行期間進(jìn)行分動(dòng)態(tài)的分配存儲(chǔ)空間的方式,靜態(tài)存儲(chǔ)方式是指在程序運(yùn)行期間分配固定的存儲(chǔ)空間的方式;存儲(chǔ)空間分為程序區(qū)、靜態(tài)存儲(chǔ)區(qū)和動(dòng)態(tài)存儲(chǔ)區(qū);全局變量全部放在靜態(tài)存儲(chǔ)區(qū)中,程序開始時(shí)分配空間,完畢時(shí)釋放;動(dòng)態(tài)存儲(chǔ)區(qū)中存放以下數(shù)據(jù):1、函數(shù)形式參數(shù);2、自動(dòng)變量;3、函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)保護(hù)和返回地址;在C語言中每個(gè)變量和函數(shù)都有兩個(gè)屬性,是數(shù)據(jù)類型和數(shù)據(jù)存儲(chǔ)類型,存儲(chǔ)類別是數(shù)據(jù)在內(nèi)存中存儲(chǔ)的方式。
存儲(chǔ)方式分為靜態(tài)和動(dòng)態(tài)存儲(chǔ)類,具體包含有四種:自動(dòng)的(auto),靜態(tài)的(static),寄存器的(register),外部的(extern),如果不加以聲明,就自認(rèn)為是auto型就會(huì)自動(dòng)分配存儲(chǔ)空間屬于動(dòng)態(tài)存儲(chǔ)方式。Static聲明局部變量是在函數(shù)調(diào)用結(jié)束后不消失而保留原值,即占用存儲(chǔ)單元不釋放,在下一次調(diào)用該函數(shù)時(shí),該變量已有值,就是上次函數(shù)調(diào)用結(jié)束時(shí)的值。其中需要說明的是在定義局部變量不賦初值的話,則靜態(tài)局部變量編譯時(shí)自動(dòng)賦值為0或者空字符,雖然靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存在,但是其他函數(shù)不能引用它的。靜態(tài)局部變量主要用在當(dāng)初始化后,變量只是被引用而不改變其值。Register變量是C語言中允許將局部變量的值放在CPU中的寄存器中需要時(shí)直接從寄存器中取出來參加運(yùn)算,不必再到內(nèi)存中提取,但是計(jì)算機(jī)系統(tǒng)中寄存器數(shù)量有限,不能任意定義任意多的存儲(chǔ)器,局部靜態(tài)變量不能定義為寄存器變量。Extern聲明外部變量,用以擴(kuò)展外部變量的作用域。在一個(gè)文件中,如果定義之前的函數(shù)想引用該外部變量,則應(yīng)該在引用之前用關(guān)鍵字extern對(duì)該變量做外部變量聲明。在多文件中,也可以采用extern聲明的辦法進(jìn)行外部變量聲明。有時(shí)希望某些局部變量只限于被本文件引用,而不能被其他文件引用,這時(shí)就可以采用在定義外部變量時(shí)外加一個(gè)static,這在程序模塊化設(shè)計(jì)中加強(qiáng)了通用性。Static來聲明一個(gè)變量的作用有二個(gè),一個(gè)是在聲明對(duì)局部變量時(shí)。則為該變量分配的空間在整個(gè)程序執(zhí)行期間始終存在;一個(gè)是在對(duì)全局變量聲明中,該變量的作用域僅限于本文件模塊操作。注意:這些方法同樣適用于函數(shù)的聲明
點(diǎn)擊加載更多評(píng)論>>