08 作用域和生存期

2021-09-24 12:26:39 字數 1969 閱讀 4353

2019獨角獸企業重金招聘python工程師標準》

變數的作用域(scope):變數起作用或有效的**範圍,空間。

變數的生存期(life time):變數存在的時間範圍,時間。

<1>根據變數的作用域將變數分為全域性變數和區域性變數

全域性變數儲存在靜態資料區,區域性變數在堆疊中。

全域性變數(global variable):

作用域為它定義處開始到它的原始檔結束為止,在某乙個函式中改變會影響到其他函式,可以利用全域性變數從被調函式中返回多個值。

生存期為整個程式執行期間,即程式啟動時被建立,在程式執行結束時被銷毀。

靜態全域性變數的作用域被限定在它所在的原始檔中。

外部全域性變數使用extern關鍵字宣告,作用域擴到到其他原始檔中。

全域性變數的缺點:維護困難,排錯困難,**復用困難。所以盡量少用。

區域性變數(local wariable):

在函式體和**塊中定義的變數。

作用域為它定義處開始到它的**塊結束為止 ,不同的函式可以定義同名變數。

在被呼叫的時候才分配儲存單元,離開函式後釋放。

所有形參都是區域性變數,實參是主調函式中的區域性變數。

如果全域性變數和區域性變數同名,在區域性變數的作用域範圍內,全域性變數將被遮蔽。

<2>根據區域性變數的生存期不同,又將區域性變數分為

普通(自動,auto)區域性變數 (預設)

靜態(static)區域性變數 占有永久性的儲存單元(未賦初值預設為0),靜態區域性變數的生存區和全域性變數相同。

暫存器型(register) 無位址,不能求位址運算,大小必須能被cpu的暫存器接受。

要注意的是這只是對作業系統的一種建議,並不是強制性命令,作業系統會根據當前暫存器的使用情況和自己的策略決定是否將該變數調到暫存器存放。有時不是暫存器變數也會調到暫存器中存放,所以在通常開發中暫存器變數沒有很大意義。

乙個工程中的所有普通全域性變數不能同名,位於不同原始檔中的靜態全域性變數名稱可以相同。

函式的生存期和作用域:

函式的生存期是整個程式執行期間

根據作用域不同,函式分為普通(非靜態)函式和靜態函式

普通函式的作用域是整個工程範圍,即在乙個工程中左右原始檔中都可以呼叫

靜態函式的作用域是它所在的原始檔,即只能在該函式所在的原始檔中呼叫它

static:內部函式,只能在所定義的原始檔中被其他函式呼叫。

extern:外部函式,可以被其他原始檔中的函式呼叫,不指明儲存類別的函式預設為外部函式。

關鍵字static的作用:

在函式體,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。

在模組內(但在函式體外),乙個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問。它是乙個本地的全域性變數。

在模組內,乙個被宣告為靜態的函式只可被這一模組內的其它函式呼叫。那就是,這個函式被限制在宣告它的模組的本地範圍內使用。

小結:

資料的兩種屬性:資料型別和儲存類別。

從作用域角度分,有區域性變數和全域性變數。

區域性變數包括自動變數、靜態區域性變數(離開函式,變數值保留)、暫存器變數和形參;

全域性變數分為靜態全域性變數(只能在本檔案中使用)和非靜態全域性變數(其他檔案可用)。

從函式生存期來分,有動態儲存和靜態儲存。

動態儲存包括自動變數、暫存器變數和形參;

靜態儲存分為靜態全域性變數(本檔案)、靜態區域性變數(函式)和非靜態全域性變數(其他檔案)。

從變數值存放的位置來區分,可分為靜態和動態。

靜態包括靜態全域性,靜態區域性,外部變數;

動態包括自動變數和形參。

作用域與生存期

1.作用域 作用域指識別符號能夠被使用的範圍 只有在作用域內識別符號才可以被使用。在此階段針對編譯和鏈結過程。1 函式中定義的識別符號,包括形參和函式體中定義的區域性變數,作用域都在函式內,也稱作函式域。2 檔案作用域也稱全域性作用域。定義在所有函式之外的識別符號,具有檔案作用域,作用域為從定義處到...

靜態生存期和動態生存期

靜態生存期 定義 如果某乙個物件的生存期和程式的執行的生存期一樣,則這個物件具有靜態生存期。關鍵字 static 特點靜態變數不會隨著每次函式的呼叫產生乙個新的副本,也不會隨著函式返回而失效。第n次呼叫函式時,靜態變數的值為第n 1次呼叫的靜態變數的值,依次類推!也就是說靜態變數 第一次賦值有效,也...

C 中的生存期和作用域

生存期和作用域,究竟有什麼樣的關係呢?先解釋一下生存期吧。乙個程序對應的記憶體空間中,包含5種不同的資料區。按照記憶體中從低到高的順序,分別為 棧 堆 bss段 資料段和 段。棧 存放程式臨時建立的區域性物件。一般vc 6.0生成的可執行檔案只有1mib多的棧。堆 存放程序執行中被動態分配的記憶體段...