靜態變數的生存期和作用域

2021-04-22 06:52:02 字數 2142 閱讀 8427

technorati 標籤:

vba,

static,

靜態變數,

生存期,

作用域摘編自:http://baike.baidu.com/view/675642.htm

靜態變數的型別說明符是static。靜態變數當然是屬於靜態儲存方式,但是屬於靜態儲存方式的量不一定就是靜態變數,例如外部變數雖屬於靜態儲存方式,但不一定是靜態變數,必須由 static加以定義後才能成為靜態外部變數,或稱靜態全域性變數。對於自動變數,它屬於動態儲存方式。但是也可以用static定義它為靜態自動變數,或稱靜態區域性變數,從而成為靜態儲存方式。由此看來,乙個變數可由static進行再說明,並改變其原有的儲存方式。

1. 靜態區域性變數

在區域性變數的說明前再加上static說明符就構成靜態區域性變數。例如:

static int a,b; 

static float array[5]=;

靜態區域性變數屬於靜態儲存方式,它具有以下特點:

(1)靜態區域性變數在函式內定義,但不象自動變數那樣,當呼叫時就存在,退出函式時就消失。靜態區域性變數始終存在著,也就是說它的生存期為整個源程式。

(2)靜態區域性變數的生存期雖然為整個源程式,但是其作用域仍與自動變數相同,即只能在定義該變數的函式內使用該變數。退出該函式後,儘管該變數還繼續存在,但不能使用它。

(3)允許對構造類靜態區域性量賦初值。若未賦以初值,則由系統自動賦以0值。

(4)對基本型別的靜態區域性變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。根據靜態區域性變數的特點,可以看出它是一種生存期為整個源程式的量。雖然離開定義它的函式後不能使用,但如再次呼叫定義它的函式時,它又可繼續使用,而且儲存了前次被呼叫後留下的值。因此,當多次呼叫乙個函式且要求在呼叫之間保留某些變數的值時,可考慮採用靜態區域性變數。雖然用全域性變數也可以達到上述目的,但全域性變數有時會造成意外的***,因此仍以採用區域性靜態變數為宜。

2.靜態全域性變數

全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。而靜態全域性變數則限制了其作用域,即只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其它原始檔中引起錯誤。從以上分析可以看出,把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域,限制了它的使用範圍。因此static 這個說明符在不同的地方所起的作用是不同的。應予以注意。

3、靜態函式和靜態變數

除範圍之外,變數還有存活期,在這一期間變數能夠保持它們的值。在應用程式的存活期內一直保持模組級變數和公用變數的值。但是,對於 dim 宣告的區域性變數以及宣告區域性變數的過程,僅當過程在執行時這些區域性變數才存在。通常,當乙個過程執行完畢,它的區域性變數的值就已經不存在,而且變數所佔據的記憶體也被釋放。當下一次執行該過程時,它的所有區域性變數將重新初始化。

但可將區域性變數定義成靜態的,從而保留變數的值。在過程內部用 static 關鍵字宣告乙個或多個變數,其用法和 dim 語句完全一樣:

static depth 

例如,下面的函式將儲存在靜態變數 accumulate 中的以前的運營總值與乙個新值相加,以計算運營總值。

function runningtotal (num) 

endfunction

4、宣告所有的區域性變數為靜態變數

為了使過程中所有的區域性變數為靜態變數,可在過程頭的起始處加上 static 關鍵字。例如:

static

function runningtotal (num) 

這就使過程中的所有區域性變數都變為靜態,無論它們是用 static、dim 或 private 宣告的還是隱式宣告的。可以將 static 放在任何 sub 或 funtion 過程頭的前面,包括事件過程和宣告為 private 的過程。

靜態變數的生存期和作用域

靜態變數的型別說明符是static。靜態變數當然是屬於靜態儲存方式,但是屬於靜態儲存方式的量不一定就是靜態變數,例如外部變數雖屬於靜態儲存方式,但不一定是靜態變數,必須由 static加以定義後才能成為靜態外部變數,或稱靜態全域性變數。對於自動變數,它屬於動態儲存方式。但是也可以用static定義它...

靜態生存期和動態生存期

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

08 作用域和生存期

2019獨角獸企業重金招聘python工程師標準 變數的作用域 scope 變數起作用或有效的 範圍,空間。變數的生存期 life time 變數存在的時間範圍,時間。1 根據變數的作用域將變數分為全域性變數和區域性變數 全域性變數儲存在靜態資料區,區域性變數在堆疊中。全域性變數 global va...