[摘 要]:C語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有匯編語言的特點。它是世界上最流行、使用最廣泛的高級程序設計語言之一。在操作系統和系統使用程序以及需要對硬件進行操作的場合,用C語言明顯優于其它高級語言。但是,由于C語言牽涉到的概念比較復雜,規則繁多,所以很多初學者感到困難,尤其在函數的局部變量、全局變量、遞歸調用、指針等的使用上更是一頭霧水,本文就C語言的局部變量和全局變量的定義及其使用進行一些分析比較。
[關鍵詞]:C語言 局部變量 全局變量 作用域
一、引言
C語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有匯編語言的特點。它是世界上最流行、使用最廣泛的高級程序設計語言之一。在操作系統和系統使用程序以及需要對硬件進行操作的場合,用C語言明顯優于其它高級語言。在C語言函數的形參變量中,形參變量只在被調用期間才分配內存單元,調用結束立即釋放。這一點表明形參變量只有在函數內才是有效的,離開該函數就不能再使用了。這種變量有效性的范圍稱變量的作用域。不僅對于形參變量,C語言中所有的量都有自己的作用域。變量說明的方式不同,其作用域也不同。C語言中的變量,按作用域范圍可分為兩種,即局部變量和全局變量。
二、局部變量
局部變量是指在程序中,只在特定過程或函數中可以訪問的變量,是相對與全局變量而言的。
它有幾個特征:作用域為定義它的函數;編譯器不會對自動變量給予隱含的初值,故其值不確定,因此每次使用前必須明確的置初值;形參是自動變量,作用域僅限于相應函數內;自動變量隨函數的引用而存在和消失,由一次調用到下一次調用之間不保持值。
關于局部變量的作用域要注意幾點:主函數中定義的變量也只能在主函數中使用,不能在其它函數中使用。同時,主函數中也不能使用其它函數中定義的變量。因為主函數也是一個函數,它與其它函數是平行關系。這一點是與其它語言不同的,應予以注意;形參變量是屬于被調函數的局部變量,實參變量是屬于主調函數的局部變量;允許在不同的函數中使用相同的變量名,它們代表不同的對象,分配不同的單元,互不干擾,也不會發生混淆;在復合語句中也可定義變量,其作用域只在復合語句范圍內。
三、全局變量
全局變量也稱為外部變量,它是在函數外部定義的變量。它不屬于哪一個函數,它屬于一個源程序文件。其作用域是整個源程序。在函數中使用全局變量,一般應作全局變量說明。只有在函數內經過說明的全局變量才能使用。全局變量的說明符為extern。但在一個函數之前定義的全局變量,在該函數內使用可不再加以說明。
全局變量的優點有:地址固定、效率高;用起來方便。
全局變量的缺點有:全局變量保存在靜態存貯區,程序開始運行時為其分配內存,程序結束釋放該內存。與局部變量的動態分配、動態釋放相比,生存期比較長,因此過多的全局變量會占用較多的內存單元;全局變量破壞了函數的封裝性能。前面的章節曾經講過,函數象一個黑匣子,一般是通過函數參數和返回值進行輸入輸出,函數內部實現相對獨立。但函數中如果使用了全局變量,那么函數體內的語句就可以繞過函數參數和返回值進行存取,這種情況破壞了函數的獨立性,使函數對全局變量產生依賴。同時,也降低了該函數的可移植性;全局變量使函數的代碼可讀性降低。由于多個函數都可能使用全局變量,函數執行時全局變量的值可能隨時發生變化,對于程序的查錯和調試都非常不利。
使用全局變量時應注意:全局變量是使程序簡潔,在保持簡潔的同時不能使程序的邏輯發生混亂。特別是程序中需要根據某些狀態來決定程序的流程時;全局變量處理的內容最好具有唯一性;需要使用多個全局變量時,最好把這些全局變量都封裝在一個結構中;自定義的庫中最好不要包括全局變量。
總之,全局變量可以使用,但是全局變量使用時應注意的是盡可能使其名字易于理解,而且不能太短,避免名字空間的污染;避免使用巨大對象的全局變量。
四、應用分析
int x=100;/*全局變量的定義*/
main( )
{ int x=100;/*局部變量,函數內有效*/
f( );
ff( );
printf(“%d\n”,x); }
f( )
{ int x=500;/*局部變量,函數內有效*/
x+=100;
printf(“%d\n”,x); }
ff( )
{ x+=100;/*使用全局變量*/
printf(“%d\n”,x); }
運行結果:600/*調用函數f( )的結果*/
200/*調用函數ff( )的結果*/
100/*調用函數main( )的結果*/
以上是局部變量和全局變量的一個典型的應用,在這個程序中”int x=100”中的x是一個全局變量,一經定義編譯系統為其分配固定的內存單元,在程序運行的自始至終都占用固定單元,所以在main( )函數的最后一句中輸出的結果是100;在f( )函數中x定義為一個值為500的局部變量,由于在局部變量起作用的范圍內,全局變量不起作用,所以”int x=500”在f( )函數中有效,故第一個輸出的結果是600;在ff( )函數中,沒有定義局部變量,所以x被認為就是之前定義的全局變量的x,其值自然就是100,故第二個輸出的結果是200。
五、結論
通過對全局變量與局部變量的分析,在使用全局變量與局部變量時應注意到:不同函數內的局部變量可以重名,互不影響。但是,在局部變量起作用的范圍內,全局變量不起作用。最后全局變量的初始化只能有一次,是在對全局變量說明時進行初始化。
參考文獻:
[1]譚浩強. C語言程序設計 [M]. 北京:清華大學出版社 1991
[2]李鳳霞 C語言程序設計教程(第二版)[M] 北京:北京理工大學出版社 2008