嵌入式系統(tǒng)C語(yǔ)言重點(diǎn)語(yǔ)法const、volatile、static、堆棧等的意義及用法
在單片機(jī)應(yīng)用中,堆棧是個(gè)特殊的存儲(chǔ)區(qū),主要功能是暫時(shí)存放數(shù)據(jù)和地址,通常用來(lái)保護(hù)斷點(diǎn)和現(xiàn)場(chǎng)。
要點(diǎn):堆,隊(duì)列優(yōu)先,先進(jìn)先出(FIFO—first in first out) 。 棧,先進(jìn)后出(FILO—First-In/Last-Out)。
const:
const修飾的數(shù)據(jù)類(lèi)型是指常類(lèi)型,常類(lèi)型的變量或?qū)ο蟮闹凳遣荒鼙桓碌摹?/p>
const關(guān)鍵字的作用主要有以下幾點(diǎn):
(1)可以定義const常量,具有不可變性。 例如:
const int Max=100; int Array[Max];
(2)便于進(jìn)行類(lèi)型檢查,使編譯器對(duì)處理內(nèi)容有更多了解,消除了一些隱患。例如: void f(const int i) { ………} 編譯器就會(huì)知道i是一個(gè)常量,不允許修改;
(3)可以避免意義模糊的數(shù)字出現(xiàn),同樣可以很方便地進(jìn)行參數(shù)的調(diào)整和修改。
(4)可以保護(hù)被修飾的東西,防止意外的修改,增強(qiáng)程序的健壯性。 還是上面的例子,如果在函數(shù)體內(nèi)修改了i,編譯器就會(huì)報(bào)錯(cuò); 例如:
void f(const int i) { i=10;//error! } 1
(5) 為函數(shù)重載提供了一個(gè)參考。
class A { ......
void f(int i) {......} //一個(gè)函數(shù)
void f(int i) const {......} //上一個(gè)函數(shù)的重載 ......
}; 1234
(6) 可以節(jié)省空間,避免不必要的內(nèi)存分配。 例如:
#define PI 3.14159 //常量宏
const doulbe Pi=3.14159; //此時(shí)并未將Pi放入ROM中 ......
double i=Pi; //此時(shí)為Pi分配內(nèi)存,以后不再分配!
double I=PI; //編譯期間進(jìn)行宏替換,分配內(nèi)存
double j=Pi; //沒(méi)有內(nèi)存分配
double J=PI; //再進(jìn)行宏替換,又一次分配內(nèi)存! 123456
const定義常量從匯編的角度來(lái)看,只是給出了對(duì)應(yīng)的內(nèi)存地址,而不是象#define一樣給出的是立即數(shù),所以,const定義的常量在程序運(yùn)行過(guò)程中只有一份拷貝,而#define定義的常量在內(nèi)存中有若干個(gè)拷貝。
(7) 提高了效率。 編譯器通常不為普通const常量分配存儲(chǔ)空間,而是將它們保存在符號(hào)表中,這使得它成為一個(gè)編譯期間的常量,沒(méi)有了存儲(chǔ)與讀內(nèi)存的操作,使得它的效率也很高。
編輯:admin 最后修改時(shí)間:2018-05-18