複製鏈接
請複製以下鏈接發送給好友

局部變量

鎖定
局部變量,也稱內部變量,是指在一個函數內部或複合語句內部定義的變量 [1]  。局部變量的作用域是定義該變量的函數或定義該變量的複合語句。局部變量的生存期是從函數被調用的時刻算起到函數返回調用處的時刻結束。
中文名
局部變量
外文名
Local variables
範    圍
C語言等面向過程語言中
特    點
可以和全局變量重名
不    足
局部變量會屏蔽全局變量
應用領域
數理科學

局部變量定義

局部變量,也稱內部變量,是指在一個函數內部或複合語句內部定義的變量。
局部變量的生存期:從函數被調用的時刻算起到函數返回調用處的時刻結束 [2] 
局部變量的作用域是定義該變量的函數或定義該變量的複合語句。也就是説,局部變量只在定義它的函數或複合語句範圍內有效,只能在定義它的函數或複合語句內才能使用它們。如圖1:
圖1 圖1
在函數f1內定義了三個變量,a為形參,b、c為一般變量。在fl的範圍內a、b、c有效,或者説a、b、c變量的作用域限於f1內。同理,x、y、i、j的作用域限於f2內。m、n的作用域限於main函數內。關於局部變量的作用域還要説明以下幾點:
1、主函數main()中定義的變量也只在主函數中有效,而不能因為在主函數中定義在整個文件或程序中有效。主函數也不能使用其他函數中定義的變量。因為主函數也是一個函數,它與其他函數是平行關係。這一點是與其他語言不同的,應予以注意。
2、不同函數中可以使用相同名字的變量,它們代表不同的對象,分配不同的單元,互不干擾。例如,上面在f1函數中定義了變量b和c,倘若在f2函數中也定義變量b和c,它們在內存中佔不同的單元,互不干擾。
3、形式參數是屬於被調函數的局部變量。例如上面f1函數中的形參a,也只在f1函數中有效,其他函數可以調用f1函數,但不能引用f1函數中的形參a。
4、在一個函數內部,可以在複合語句中定義變量,這些變量只在本複合語句中有效,這種複合語句也稱為“分程序”或“程序塊”。

局部變量全局變量

全局變量也稱外部變量,它是在函數外部定義的變量。它不屬於哪一個函數,而是屬於一個源程序文件:其作用域是整個源程序 [3] 
幾乎程序中的所有函數都能使用全局變量,客觀上全局變量就起到了在函數間傳遞數據的作用,甚至可以減少形參和實參的數量。當然在享用它的好處時,也要慎重,避免全局變量過多帶來的降低函數通用性及存儲空間的浪費。
對於全局變量還有以下幾點説明:
1、全局變量從程序運行起即佔據內存,在程序整個運行過程中可隨時訪問,程序退出時釋放內存。與之對應的局部變量在進入語句塊時獲得內存,僅能由語句塊內的語句訪問,退出語句塊時釋放內存,不再有效。
2、局部變量定義後不會自動初始化,除非程序員指定初值。全局變量在程序員不指定初值的情況下自動初始化為零。
3、在同一源文件中,允許全局變量和局部變量同名。在局部變量的作用域內,全局變量不起作用。

局部變量變量的作用域

在現實生活中,世界通用語言為英語,如果在其他國家説漢語,別人可能聽不懂,但是如果説英語,那麼世界各地的人都可能明白。與此類似,程序中的變量也有它自己的使用範圍,我們稱其為變量的作用域。變量的作用域都是通過它在程序中的位置隱式説明的。
C語言中的變量,按作用域範圍可分為兩種,即局部變量和全局變量,如圖2所示。
圖2 圖2

局部變量重名現象

在C語言等面向過程語言中,局部變量可以和全局變量重名,但是局部變量會屏蔽全局變量。在函數內引用這個變量時,會用到同名的局部變量,而不會用到全局變量

局部變量應用

在Java等面嚮對象語言中,也可能出現多個局部變量重名的情況。例如一個方法的形式參數與類成員的名字相同,這時形式參數會把類成員屏蔽,如果要訪問類成員,應該用this關鍵字
參考資料
  • 1.    劉平,陳琨主編,C語言程序設計教程 第2版,貴州大學出版社,2016.08,第170頁
  • 2.    祁建宏,張志斌主編,C程序設計與系統開發,西安電子科技大學出版社,2016.08,第158頁
  • 3.    邵雪航,王春明主編;楊迎副主編;杜凱主審,C語言程序設計教程,中國鐵道出版社,2016.02,第135頁