C語言中的常量、變數及其屬性,型別、儲存空間
部落格源地址 http://www.codertown.cn/blog/?p=134
常量和變數其實就是C語言裡的值,其他程式語言同樣存在,這個跟數學裡的是一樣的。
1、常量
固定的值,不可改變的值是常量,幾種型別:
在表示式中直接用數值表示;巨集定義當然也是一種表達方式;列舉型別中的成員也屬於常量的一種,但是列舉又可用來定義變數(功能較多,需要在程式碼中才能理解);const型別修飾的變數也是常量。
常量經常用來賦值,也可以在表示式中用來計算,在判斷語句中用來做邏輯判斷。
常量存放在常量區。
2、變數
可以重新賦值的一個代號;比如int a = 0;在其他地方,a可以被重新賦值,比如到某個地方a = 1,這就是一個變數。
變數的屬性有以下幾個:
static 靜態變數,記憶體空間在全域性變數區;
extern 在其他檔案中可以使用的變數;
const 經過這個詞語修飾後,該變數不可以被修改;
3、儲存空間的解釋
一個最簡單程式的執行,需要記憶體儲存變數,需要CPU執行編譯後的二進位制指令。
在一個作業系統中,它的編譯器編譯一個C語言程式之後,會有存放指令的記憶體地址(這是連結地址)。當被呼叫執行該程式後,CPU會跳轉到該地址執行相應的指令,此時該程式中的變數,常量,函式等被呼叫的時候,就按照記憶體地址去取到相應的內容,然後一步一步執行。
最終生成的程式就有了地址空間的概念。
一般分成堆區(動態分配的記憶體)、棧區(變數存放)、全域性變數區(獨立於任何大括號之外的地方定義)、靜態區(static修飾的變數)、常量區(存放常量、字串常量),如此,我們知道了對於一個C語言程式來講,各個不同內容存放的位置。
4、型別的解釋
相當於模具吧,你用該模具制定出來的東西就只能是那個樣子,不過在程式設計中,我們可以強制轉換,可玩性高一點,不會那麼死。型別一般用來定義變數。
不同的型別所佔的記憶體空間不一樣。一般情況下,char型別一個位元組,short型別2個位元組,int型別4個位元組。
解釋一般情況:在我們的系統中,一般是32位架構,所以一個指令週期為32位,那麼在一個指令週期內可讀取四個位元組來保證效率最大化。與此同時,就涉及到了位元組對齊的概念。什麼叫對齊,就好比軍訓的時候列隊,這一隊只能站四個人,那麼就是以四位元組對齊,一個保證整齊度,一個保證一次性CPU能讀到最多資料。
那麼,不一般的情況下,有1位元組對齊,2位元組對齊,8位元組對齊,在程式中均可以修改;而且該位元組對齊只有在新定義的結構體型別中出現。
那麼,什麼是新定義的型別?
在C語言程式中,我們常用的型別有char\short\int\long\long long\float\double,當然僅僅有這些是不夠的,所以K&R又實現了一種方式,可以新定義型別,比如struct、enum,由此我們可以定義出很多不容資料型別一起的新的型別。(這裡一般根據實際情況去定義吧)。就好像我們可以自己定義模具一樣。
總結下幾點:
1、什麼是變數,什麼是常量以及常量的屬性
2、存放變數和常量的儲存空間是啥樣的?
3、什麼是型別,怎麼理解?怎麼使用?以及怎麼定義新的型別?
理解了就好。歡迎討論。