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的值並返回,而不會像之前那樣不斷的累乘了。
-
C語言的移位操作符使用方法
位移位運算符是將數據看成二進制數,對其進行向左或向右移動若干位的運算。位移位運算符分為左移和右移兩種,均為雙目運算符。第一運算對象是移位對象,第二個運算對象是所移的二進制位數。以下是小編為大家搜索整理的C語言的移位操作符使用方法,希望能給大家帶來幫...
-
2017年計算機二級C語言考前訓練題及答案
計算機二級對於很多考生來説還是比較有難度的,那麼怎樣順利通過二級考試呢?這就需要大家平時多練習和找方法了。以下是本站小編整理的2017年計算機二級C語言考前訓練題及答案,希望對大家有幫助!考前訓練題一1:第1題m個人的成績存放在score數組中,請編寫函數fun,它...
-
淺談高職C語言課程的教學分析與設計
C語言作為學院網絡技術專業的人門課程,旨在通過鍛鍊學生的邏輯思維,牆養學生在職業崗位中實際應用的能力.目前,該專業的學生畢業後主要從事網站開發和網絡管理等方面的工作,而在這些領域幾乎都以C語言作為應用的開發工具.但從歷年教學實踐來看,教師往往付出的精力多...
-
C語言的指針類型講解
C語言的指針類型包括兩方面的信息:一是地址,存放在指針變量中;二是類型信息,下面是小編為大家整理的C語言的指針類型講解,歡迎參考~指針存儲了內存的地址,同時指針是有類型的,如int*,float*,那麼,一個自然的猜想就是指針變量應該存儲這兩方面的信息:地址和指針類型,比如,就...