版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

[科普中國]-局部變量

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識科普陣地
收藏

局部變量,也稱內(nèi)部變量,是指在一個函數(shù)內(nèi)部或復(fù)合語句內(nèi)部定義的變量1。局部變量的作用域是定義該變量的函數(shù)或定義該變量的復(fù)合語句。局部變量的生存期是從函數(shù)被調(diào)用的時刻算起到函數(shù)返回調(diào)用處的時刻結(jié)束。

定義局部變量,也稱內(nèi)部變量,是指在一個函數(shù)內(nèi)部或復(fù)合語句內(nèi)部定義的變量。

局部變量的生存期:從函數(shù)被調(diào)用的時刻算起到函數(shù)返回調(diào)用處的時刻結(jié)束2。

局部變量的作用域是定義該變量的函數(shù)或定義該變量的復(fù)合語句。也就是說,局部變量只在定義它的函數(shù)或復(fù)合語句范圍內(nèi)有效,只能在定義它的函數(shù)或復(fù)合語句內(nèi)才能使用它們。例如:

在函數(shù)f1內(nèi)定義了三個變量,a為形參,b、c為一般變量。在fl的范圍內(nèi)a、b、c有效,或者說a、b、c變量的作用域限于f1內(nèi)。同理,x、y、i、j的作用域限于f2內(nèi)。m、n的作用域限于main函數(shù)內(nèi)。關(guān)于局部變量的作用域還要說明以下幾點:

1、主函數(shù)main()中定義的變量也只在主函數(shù)中有效,而不能因為在主函數(shù)中定義在整個文件或程序中有效。主函數(shù)也不能使用其他函數(shù)中定義的變量。因為主函數(shù)也是一個函數(shù),它與其他函數(shù)是平行關(guān)系。這一點是與其他語言不同的,應(yīng)予以注意。

2、不同函數(shù)中可以使用相同名字的變量,它們代表不同的對象,分配不同的單元,互不干擾。例如,上面在f1函數(shù)中定義了變量b和c,倘若在f2函數(shù)中也定義變量b和c,它們在內(nèi)存中占不同的單元,互不干擾。

3、形式參數(shù)是屬于被調(diào)函數(shù)的局部變量。例如上面f1函數(shù)中的形參a,也只在f1函數(shù)中有效,其他函數(shù)可以調(diào)用f1函數(shù),但不能引用f1函數(shù)中的形參a。

4、在一個函數(shù)內(nèi)部,可以在復(fù)合語句中定義變量,這些變量只在本復(fù)合語句中有效,這種復(fù)合語句也稱為“分程序”或“程序塊”。

全局變量全局變量也稱外部變量,它是在函數(shù)外部定義的變量。它不屬于哪一個函數(shù),而是屬于一個源程序文件:其作用域是整個源程序3。

幾乎程序中的所有函數(shù)都能使用全局變量,客觀上全局變量就起到了在函數(shù)間傳遞數(shù)據(jù)的作用,甚至可以減少形參和實參的數(shù)量。當(dāng)然在享用它的好處時,也要慎重,避免全局變量過多帶來的降低函數(shù)通用性及存儲空間的浪費。

對于全局變量還有以下幾點說明:

1、全局變量從程序運行起即占據(jù)內(nèi)存,在程序整個運行過程中可隨時訪問,程序退出時釋放內(nèi)存。與之對應(yīng)的局部變量在進入語句塊時獲得內(nèi)存,僅能由語句塊內(nèi)的語句訪問,退出語句塊時釋放內(nèi)存,不再有效。

2、局部變量定義后不會自動初始化,除非程序員指定初值。全局變量在程序員不指定初值的情況下自動初始化為零。

3、在同一源文件中,允許全局變量和局部變量同名。在局部變量的作用域內(nèi),全局變量不起作用。

變量的作用域在現(xiàn)實生活中,世界通用語言為英語,如果在其他國家說漢語,別人可能聽不懂,但是如果說英語,那么世界各地的人都可能明白。與此類似,程序中的變量也有它自己的使用范圍,我們稱其為變量的作用域。變量的作用域都是通過它在程序中的位置隱式說明的。

C語言中的變量,按作用域范圍可分為兩種,即局部變量和全局變量,如圖所示。

重名現(xiàn)象在C語言等面向過程語言中,局部變量可以和全局變量重名,但是局部變量會屏蔽全局變量。在函數(shù)內(nèi)引用這個變量時,會用到同名的局部變量,而不會用到全局變量。

應(yīng)用在Java等面向?qū)ο笳Z言中,也可能出現(xiàn)多個局部變量重名的情況。例如一個方法的形式參數(shù)與類成員的名字相同,這時形式參數(shù)會把類成員屏蔽,如果要訪問類成員,應(yīng)該用this關(guān)鍵字。

本詞條內(nèi)容貢獻者為:

韓彥昌 - 教授 - 華南師范大學(xué)數(shù)學(xué)科學(xué)學(xué)院