官术网_书友最值得收藏!

3.4 變量的存儲類型

存儲類定義C語言程序中變量或函數(shù)的范圍(可見性)和生命周期,這些說明符放置在它們所修飾的類型之前。在C語言程序中,可以通過存儲類修飾符來告訴編譯器要處理什么樣的類型變量,具體有以下4種:自動型(auto)、靜態(tài)型(static)、寄存器型(register)和外部型(extern)。

3.4.1 自動型變量

自動型(auto)變量是所有局部變量默認的存儲類型。在變量前添加auto關(guān)鍵字,是聲明該局部變量為自動的,這就意味著每次執(zhí)行到定義該變量的時候,都會產(chǎn)生一個新的變量,并且對其重新進行初始化,另外,auto只能用在函數(shù)內(nèi),即auto只能修飾局部變量。

例如:

該語句中,a是形參,b、c是自動變量,對c賦初值100。執(zhí)行完函數(shù)f()后,自動釋放a、b、c所占的存儲單元。

☆大牛提醒☆

關(guān)鍵字auto可以省略,auto不寫則隱含定為“自動存儲類別”,屬于動態(tài)存儲方式。

【例3.11】編寫程序,定義自動型變量,通過多次調(diào)用函數(shù)輸出運行結(jié)果(源代碼\ch03\3.11.txt)。

圖3-12 例3.11的程序運行結(jié)果

程序運行結(jié)果如圖3-12所示。

在本實例中,首先在函數(shù)fun()中定義一個自動型的整型變量add,在其中對變量進行加1操作。之后在主函數(shù)main()中通過顯示的提示語句,可以看到調(diào)用2次函數(shù)fun()并輸出,從結(jié)果中可以看到函數(shù)fun()中定義整型變量時系統(tǒng)會為其分配內(nèi)存空間,在函數(shù)調(diào)用結(jié)束時自動釋放這些存儲空間。

3.4.2 靜態(tài)型變量

靜態(tài)型(static)變量指示編譯器在程序的生命周期內(nèi)保持局部變量的存在,而不需要在每次它進入和離開作用域時進行創(chuàng)建和銷毀。因此,使用static修飾符修飾局部變量可以在函數(shù)調(diào)用之間保持局部變量的值。

static修飾符也可以應(yīng)用于全局變量,當static修飾符修飾全局變量時,會使變量的作用域限制在聲明它的文件內(nèi)。全局聲明的一個靜態(tài)型變量或方法可以被任何函數(shù)或方法調(diào)用,只要這些方法出現(xiàn)在跟靜態(tài)型變量或方法同一個文件中。

【例3.12】編寫程序,定義靜態(tài)型變量,通過多次調(diào)用函數(shù)輸出運行結(jié)果(源代碼\ch03\3.12.txt)。

圖3-13 例3.12的程序運行結(jié)果

程序運行結(jié)果如圖3-13所示。

在本實例中,使用了靜態(tài)型變量。首先在函數(shù)fun()中定義一個靜態(tài)型的整型變量add,在其中對變量進行加1操作。之后在主函數(shù)main()中通過顯示的提示語句,可以看到調(diào)用2次函數(shù)fun()并輸出,從結(jié)果中可以發(fā)現(xiàn)靜態(tài)變量的值保持不變,因此2次調(diào)用的結(jié)果不一樣。

3.4.3 寄存器型變量

寄存器型(register)變量用于定義存儲在寄存器中而不是RAM中的局部變量。這意味著變量的最大尺寸等于寄存器的大小(通常是一個詞),且不能對它應(yīng)用一元'&'運算符,因為它沒有內(nèi)存位置,這樣的好處是可以提高程序的運行速度。語法格式如下:

     {
       register int miles;
     }

☆大牛提醒☆

寄存器只用于需要快速訪問的變量,比如計數(shù)器。另外,定義register并不意味著變量將被存儲在寄存器中,而是意味著變量可能存儲在寄存器中,這取決于硬件的限制。

【例3.13】編寫程序,定義寄存器型變量來修飾整型變量,最后輸出運行結(jié)果(源代碼\ch03\3.13.txt)。

圖3-14 例3.13的程序運行結(jié)果

程序運行結(jié)果如圖3-14所示。

3.4.4 外部型變量

外部型(extern)變量用于提供一個全局變量的引用,全局變量對所有的程序文件都是可見的。當用戶使用外部型變量時,對于無法初始化的變量,會把變量名指向一個之前定義過的存儲位置。extern修飾符通常用于兩個或多個文件共享相同的全局變量或函數(shù)的時候。

【例3.14】編寫程序,定義外部型變量,調(diào)用兩個文件中共享的數(shù)值,并輸出運行結(jié)果(源代碼\ch03\3.14.txt)。

程序運行結(jié)果如圖3-15所示。

圖3-15 例3.14的程序運行結(jié)果

在本實例中,使用了外部型變量。首先在Extern1文件中定義了一個外部型變量count,并為其賦值為100,然后在Extern2文件中使用extern關(guān)鍵字聲明了已經(jīng)在第1個文件中定義的count變量,最后將其變量值顯示到控制臺。

主站蜘蛛池模板: 娱乐| 田东县| 迭部县| 大厂| 长乐市| 城口县| 疏勒县| 准格尔旗| 宜章县| 阿坝县| 织金县| 贵德县| 莫力| 宁南县| 德昌县| 获嘉县| 黄梅县| 大丰市| 万宁市| 青州市| 闸北区| 科技| 陆河县| 淮北市| 呼图壁县| 思茅市| 固始县| 洪洞县| 米易县| 孟州市| 黄大仙区| 罗定市| 正定县| 沛县| 大悟县| 平安县| 太仆寺旗| 石阡县| 正宁县| 吉林省| 邓州市|