在C語言中,變量是對(duì)程序中數(shù)據(jù)所占內(nèi)存空間的一種抽象定義,定義變量時(shí),用戶定義變量的名、變量的類型,這些都是變量的操作屬性。不僅可以通過變量名訪問該變量,系統(tǒng)還通過該標(biāo)識(shí)符確定變量在內(nèi)存中的位置。
在計(jì)算機(jī)中,保存變量當(dāng)前值的存儲(chǔ)單元有兩類,一類是內(nèi)存,另一類是CPU的寄存器。變量的存儲(chǔ)類型關(guān)系到變量的存儲(chǔ)位置,C語言中定義了4種存儲(chǔ)屬性,即自動(dòng)變量(auto)、外部變量(extern)、靜態(tài)變量(static)和寄存器變量(register),它關(guān)系到變量在內(nèi)存中的存放位置,由此決定了變量的保留時(shí)間和變量的作用范圍。
變量的保留時(shí)間又稱為生存期,從時(shí)間角度,可將變量分為靜態(tài)存儲(chǔ)和動(dòng)態(tài)存儲(chǔ)兩種情況:
(1)靜態(tài)存儲(chǔ)是指變量存儲(chǔ)在內(nèi)存的靜態(tài)存儲(chǔ)區(qū),在編譯時(shí)就分配了存儲(chǔ)空間,在整個(gè)程序的運(yùn)行期間,該變量占有固定的存儲(chǔ)單元,程序結(jié)束后,這部分空間才釋放,變量的值在整個(gè)程序中始終存在。
(2)動(dòng)態(tài)存儲(chǔ)是指變量存儲(chǔ)在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū),在程序的運(yùn)行過程中,只有當(dāng)變量所在的函數(shù)被調(diào)用時(shí),編譯系統(tǒng)才臨時(shí)為該變量分配一段內(nèi)存單元,函數(shù)調(diào)用結(jié)束,該變量空間釋放,變量的值只在函數(shù)調(diào)用期存在。
變量的作用范圍又稱為作用域,從空間角度,可以將變量分為全局變量和局部變量:
(1)局部變量是在一個(gè)函數(shù)或復(fù)合語句內(nèi)定義的變量,它僅在函數(shù)或復(fù)合語句內(nèi)有效,編譯時(shí),編譯系統(tǒng)不為局部變量分配內(nèi)存單元,而是在程序運(yùn)行過程中,當(dāng)局部變量所在的函數(shù)被調(diào)用時(shí),編譯系統(tǒng)根據(jù)需要,臨時(shí)分配內(nèi)存,調(diào)用結(jié)束,空間釋放。
(2)全局變量是在函數(shù)之外定義的變量,其作用范圍為從定義處開始到本文件結(jié)束,編譯時(shí),編譯系統(tǒng)為其分配固定的內(nèi)存單元,在程序運(yùn)行的自始至終都占用固定單元。
后面,我們將對(duì)這四種類型變量逐一展開實(shí)例講解。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程