當前位置:學者齋 >

計算機 >C語言 >

c語言中什麼是靜態變數

c語言中什麼是靜態變數

靜態變數是屬於靜態儲存方式,但是屬於靜態儲存方式的量不一定就是靜態變數,下面是應屆畢業生小編為大家整理的關於c語言中靜態變數的介紹,希望可以幫到大家哦。

c語言中什麼是靜態變數

 c語言靜態變數的概念定義

“靜態變數”這一術語有兩個容易混淆的定義:

語言無關的通用定義:與程式有著相同生命週期(英語:Objectlifetime)的變數;

C族語言特有的定義:以儲存類宣告的變數。

而在以Pascal為代表的許多程式語言中,所有區域性變數都由系統自動分配儲存空間,而所有全域性變數的儲存空間則以靜態分配的方式獲取(對應“靜態變數”),因此由於實際上“區域性變數”和“全域性變數”這兩個術語已足以涵蓋所有的情況,在這些程式語言中通常不使用“靜態變數”這一術語,而直接以“全域性變數”代之。一般來說,在這些程式語言中,靜態變數就是全域性變數,而即使在有明確區分全域性和靜態變數的程式語言中,在編譯後的程式碼裡二者也以相同的方式獲取儲存空間。而今術語“靜態變數”的概念則主要基於C族語言的“static”的定義(即定義2)。

  c語言靜態變數的常量使用

靜態變數也可以用於儲存常數。具體來說,靜態變數(全域性變數及組合語言裡定義的符號亦同)可用const,constant或final(根據語言決定)等關鍵字標識,這時其值就會在編譯時(英語:Compiletime)設定,並且無法在執行時改變。編譯器通常將靜態常量與文字一起置於目標檔案的文字區域,而非常量初始化資料則置於資料區;而如若有需要,有些編譯器還可選擇為其開闢專用區;為防止常數變數被錯誤的指標寫入覆蓋,亦可在這塊區域啟用記憶體保護機制

 c語言靜態變數的變數特點

靜態區域性變數

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

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

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

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

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

給讀者一個簡單直白的例子(區別靜態區域性變數和動態區域性變數):

這裡的執行結果是:

說明f在加了static的型別限制之後,就相當於全域性變數,函式呼叫完了之後,修改過的f的值仍然是有效的(即這個程式相當於求i的階乘了)。而如果不加static的型別限制,那麼,會是什麼結果呢,我們看下面的程式碼:

程式的執行結果是:

也就是說,這時函式fun中的變數f的生命週期就僅限於fun函式的範圍內了,在main中每次傳入新的引數i,f就會計算1*i的值並返回,而不會像之前那樣不斷的累乘了。

標籤: 靜態 變數 語言
  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/jsj/cyuyan/0lnk35.html