變量的存儲(chǔ)類型
出處:cnchip 發(fā)布于:2009-07-13 11:58:59
作者:曾宏安,華清遠(yuǎn)見嵌入式學(xué)院講師。
我們?cè)诔绦蛑袝?huì)經(jīng)常定義一些變量來保存和處理數(shù)據(jù)。從本質(zhì)上看,變量代表了一段可操作的內(nèi)存,也可以認(rèn)為變量是內(nèi)存的符號(hào)化表示。當(dāng)程序中需要使用內(nèi)存時(shí),可以定義某種類型的變量。此時(shí)編譯器根據(jù)變量的數(shù)據(jù)類型分配一定大小的內(nèi)存空間。程序就可以通過變量名來訪問對(duì)應(yīng)的內(nèi)存了。
如果說變量的數(shù)據(jù)類型決定了對(duì)應(yīng)內(nèi)存的大小,那么存儲(chǔ)類型則影響著對(duì)應(yīng)內(nèi)存的使用方式。所謂使用方式,具體說就是在什么時(shí)間、程序的什么地方可以使用變量,即變量的生命周期和作用域。
先了解一些基本常識(shí)。一、在程序運(yùn)行時(shí)內(nèi)存中有三個(gè)區(qū)域可以保存變量:靜態(tài)存儲(chǔ)區(qū)、棧(stack)和堆(heap)。二、根據(jù)變量定義的位置可分為全局變量(定義在函數(shù)體外的變量)和局部變量(定義在函數(shù)體內(nèi)的變量,包括形參)。
所有的全局變量和靜態(tài)局部變量(定義時(shí)使用關(guān)鍵字static)都保存在靜態(tài)存儲(chǔ)區(qū),其特點(diǎn)是:在編譯時(shí)分配內(nèi)存空間并進(jìn)行初始化。在程序運(yùn)行期間,變量一直存在,直到程序結(jié)束,變量對(duì)應(yīng)的內(nèi)存空間才被釋放。
而所有的非靜態(tài)局部變量(又稱為自動(dòng)變量)保存在棧(stack)中,其特點(diǎn)是:在變量所在的函數(shù)或模塊被執(zhí)行時(shí)動(dòng)態(tài)創(chuàng)建,函數(shù)或模塊執(zhí)行完時(shí),變量對(duì)應(yīng)的內(nèi)存空間被釋放。換句話說,函數(shù)或模塊每被執(zhí)行,局部變量就會(huì)重新被分配空間。如果變量定義時(shí)沒有初始化,那么變量中的值是隨機(jī)數(shù)。
所有用malloc分配的內(nèi)存(又稱為動(dòng)態(tài)內(nèi)存)都在堆(heap)中,其特點(diǎn)是:一般通過指針來訪問動(dòng)態(tài)分配的內(nèi)存。即可以通過free來手動(dòng)釋放動(dòng)態(tài)內(nèi)存,也可以在程序結(jié)束時(shí)由系統(tǒng)自動(dòng)釋放。
以上討論的是變量的生命周期,下面來看作用域。作用域指的是變量的可見范圍,即在變量的生命周期內(nèi),程序的哪些部分可以使用該變量。
全局變量的作用域從定義點(diǎn)開始一直到源文件的結(jié)束。如果要在定義點(diǎn)之前使用全局變量的話就需要使用關(guān)鍵字extern對(duì)作用域進(jìn)行擴(kuò)展。全局變量缺省是可以被其他文件引用的。如果希望僅限于本文件使用的話,需要在定義時(shí)使用關(guān)鍵字static。
對(duì)于局部變量來說,無論是靜態(tài)局部變量還是自動(dòng)變量,作用域都僅限于定義該變量的函數(shù)或模塊。
動(dòng)態(tài)內(nèi)存只要沒有被釋放就可以在程序的任何地方使用,前提是要知道動(dòng)態(tài)內(nèi)存的地址。
注:static加在全局變量前影響的是作用域,加在局部變量前影響的是生命周期。
“本文由華清遠(yuǎn)見https://www.embedu.org/index.htm提供”
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 什么是氫氧燃料電池,氫氧燃料電池的知識(shí)介紹2025/8/29 16:58:56
- SQL核心知識(shí)點(diǎn)總結(jié)2025/8/11 16:51:36
- 等電位端子箱是什么_等電位端子箱的作用2025/8/1 11:36:41
- 基于PID控制和重復(fù)控制的復(fù)合控制策略2025/7/29 16:58:24
- 什么是樹莓派?一文快速了解樹莓派基礎(chǔ)知識(shí)2025/6/18 16:30:52









