學(xué)習(xí)啦 > 知識(shí)大全 > 知識(shí)百科 > 公共基礎(chǔ)知識(shí) > 靜態(tài)變量有什么特點(diǎn)

靜態(tài)變量有什么特點(diǎn)

時(shí)間: 謝君787 分享

靜態(tài)變量有什么特點(diǎn)

  靜態(tài)變量是屬于靜態(tài)存儲(chǔ)方式,但是屬于靜態(tài)存儲(chǔ)方式的量不一定就是靜態(tài)變量,以下是由學(xué)習(xí)啦小編整理關(guān)于靜態(tài)變量的用法的內(nèi)容,希望大家喜歡!

  靜態(tài)變量的用法

  靜態(tài)變量也可以用于存儲(chǔ)常數(shù)。具體來(lái)說(shuō),靜態(tài)變量(全局變量及匯編語(yǔ)言里定義的符號(hào)亦同)可用const,constant或final(根據(jù)語(yǔ)言決定)等關(guān)鍵字標(biāo)識(shí),這時(shí)其值就會(huì)在編譯時(shí)(英語(yǔ):Compile time)設(shè)定,并且無(wú)法在運(yùn)行時(shí)改變。編譯器通常將靜態(tài)常量與文本一起置于目標(biāo)文件的文本區(qū)域,而非常量初始化數(shù)據(jù)則置于數(shù)據(jù)區(qū);而如若有需要,有些編譯器還可選擇為其開(kāi)辟專用區(qū);為防止常數(shù)變量被錯(cuò)誤的指針寫(xiě)入覆蓋,亦可在這塊區(qū)域啟用內(nèi)存保護(hù)機(jī)制。

  靜態(tài)變量的概念定義

  “靜態(tài)變量”這一術(shù)語(yǔ)有兩個(gè)容易混淆的定義:

  語(yǔ)言無(wú)關(guān)的通用定義:與程序有著相同生命周期(英語(yǔ):Object lifetime)的變量;

  C族語(yǔ)言特有的定義:以static存儲(chǔ)類聲明的變量。

  而在以Pascal為代表的許多程序語(yǔ)言中,所有局部變量都由系統(tǒng)自動(dòng)分配存儲(chǔ)空間,而所有全局變量的存儲(chǔ)空間則以靜態(tài)分配的方式獲取(對(duì)應(yīng)“靜態(tài)變量”),因此由于實(shí)際上“局部變量”和“全局變量”這兩個(gè)術(shù)語(yǔ)已足以涵蓋所有的情況,在這些程序語(yǔ)言中通常不使用“靜態(tài)變量”這一術(shù)語(yǔ),而直接以“全局變量”代之。一般來(lái)說(shuō),在這些程序語(yǔ)言中,靜態(tài)變量就是全局變量,而即使在有明確區(qū)分全局和靜態(tài)變量的程序語(yǔ)言中,在編譯后的代碼里二者也以相同的方式獲取存儲(chǔ)空間。而今術(shù)語(yǔ)“靜態(tài)變量”的概念則主要基于C族語(yǔ)言的“static”的定義(即定義2)。

  靜態(tài)變量的特點(diǎn)

  靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)方式,它具有以下特點(diǎn):

  (1)靜態(tài)局部變量在函數(shù)內(nèi)定義,但不像自動(dòng)變量那樣,當(dāng)調(diào)用時(shí)就存在,退出函數(shù)時(shí)就消失。靜態(tài)局部變量始終存在著,也就是說(shuō)它的生存期為整個(gè)源程序。

  (2)靜態(tài)局部變量的生存期雖然為整個(gè)源程序,但是其作用域仍與自動(dòng)變量相同,即只能在定義該變量的函數(shù)內(nèi)使用該變量。退出該函數(shù)后, 盡管該變量還繼續(xù)存在,但不能使用它。

  (3)允許對(duì)構(gòu)造類靜態(tài)局部量賦初值。若未賦以初值,則由系統(tǒng)自動(dòng)賦值。數(shù)值型變量自動(dòng)賦初值0,字符型變量賦空字符。

  (4)對(duì)基本類型的靜態(tài)局部變量若在說(shuō)明時(shí)未賦以初值,則系統(tǒng)自動(dòng)賦予0值。而對(duì)自動(dòng)變量不賦初值,則其值是不定的。 根據(jù)靜態(tài)局部變量的特點(diǎn), 可以看出它是一種生存期為整個(gè)源文件的量。雖然離開(kāi)定義它的函數(shù)后不能使用,但如再次調(diào)用定義它的函數(shù)時(shí),它又可繼續(xù)使用, 而且保存了前次被調(diào)用后留下的值。 因此,當(dāng)多次調(diào)用一個(gè)函數(shù)且要求在調(diào)用之間保留某些變量的值時(shí),可考慮采用靜態(tài)局部變量。雖然用全局變量也可以達(dá)到上述目的,但全局變量有時(shí)會(huì)造成意外的副作用,因此仍以采用局部靜態(tài)變量為宜。

  靜態(tài)變量的不同作用

  除明確標(biāo)識(shí)出變量的生命周期(英語(yǔ):Object lifetime)外,將變量聲明為static存儲(chǔ)類還會(huì)根據(jù)變量屬性不同而有一些特殊的作用:

  對(duì)于靜態(tài)全局變量來(lái)說(shuō),針對(duì)某一源文件的以static聲明的文件級(jí)變量與函數(shù)的作用域只限于文件內(nèi)(只在文件內(nèi)可見(jiàn)),也即“內(nèi)部連接”,因而可以用來(lái)限定變量的作用域;

  對(duì)于靜態(tài)局部變量來(lái)說(shuō),在函數(shù)內(nèi)以static聲明的變量雖然與自動(dòng)局部變量的作用域相同(即作用域都只限于函數(shù)內(nèi)),但存儲(chǔ)空間是以靜態(tài)分配而非默認(rèn)的自動(dòng)分配方式獲取的,因而存儲(chǔ)空間所在區(qū)域不同(一般來(lái)說(shuō),靜態(tài)分配時(shí)存儲(chǔ)空間于編譯時(shí)在程序數(shù)據(jù)段分配,一次分配全程有效;而自動(dòng)分配時(shí)存儲(chǔ)空間則是于調(diào)用棧上分配,只在調(diào)用時(shí)分配與釋放),且兩次調(diào)用間變量值始終保持一致;

  對(duì)于靜態(tài)成員變量(英語(yǔ):Member variable)來(lái)說(shuō),在C++中,在類的定義中以static聲明的成員變量屬于類變量(英語(yǔ):Class variable),也即在所有類實(shí)例中共享,與之相對(duì)的就是過(guò)程變量(又稱實(shí)例變量)(英語(yǔ):Instance variable)。
看過(guò)“靜態(tài)變量有什么特點(diǎn)”的人還看了:

1.c語(yǔ)言什么是靜態(tài)變量

2.什么是靜態(tài)方法 靜態(tài)方法的弊端

3.Java中靜態(tài)方法和實(shí)例方法的區(qū)別

4.c語(yǔ)言什么是變量 變量的分類

5.中軟c語(yǔ)言面試題及參考答案

1977499