變量
筆者是一名正在步入嵌入式Linux的程序猿。在鞏固C語言之餘,筆者認爲有必要將其整理成一系列的文章。遐思片刻,爲本系列文章取名《不一樣的C語言》。不一樣的C並不是說筆者所整理的C非STDC(標準C),而是筆者拋開C語言書籍,根據自己的認識所寫的C語言系列文章。也許入C未深的我,對於一些概念有錯誤的理解,望網名能夠多多包涵和指正。話不多說,下面馬上開篇!
有一個公式:數據結構 + 算法 = 程序。對於面向過程的C語言來說,顯然這是正確的。實現色彩斑斕的程序的畫筆,正是它--變量。
一、變量是什麼
顧名思義,變量就是在程序執行過程中可以根據需要變化的量。一說到變量,大多數C語言初學者腦子裏浮現的是int,char,float...你們的反射也並沒有什麼不妥,因爲你們把變量和類型深深的綁定到了一起。而筆者腦子裏浮現的是一段抽象化的存儲空間。我們先從變量的定義談起。
定義一個變量的格式:類型 變量名
從語法我們知道,定義一個 變量,我們首先要知道變量是什麼類型,然後爲這個變量其一個合適的名字。不知道你們會不會感覺奇怪,爲什麼我們要寫類型,至少筆者是敏感的。
在說出筆者的敏感之前,我們先來了解一下強類型語言和弱類型語言。C語言是強類型語言(當然C++/JAVA都是),PHP、JavaScript等絕大部分腳本語言是弱類型語言。那麼強和弱的區別在哪裏?區別之一就是:強類型語言在定義變量的時候需要指出變量的具體類型,而弱類型語言則顯得簡單了,PHP直接 $變量名,JavaScript直接 var 變量名。筆者敏感的正是類型,在定義一個變量的時候,我們指明瞭變量的類型,也正是因爲如此編譯器知道了如何去給我們在存儲空間中申請符合我們類型大小的空間,然後把他的操作入口給變量名。打個比方,變量名就是一把鑰匙,而他真正打開的是一所符合我們家庭大小的房子(當然你可以通過手段越界)。
我們再回過頭來思量變量,這時的你也許就不會出現int,char,float...出現的是一段存儲空間,然後根據變量的類型來確定我們需要如何解釋這段空間。到此,筆者重新給變量一個定義:變量是一段用特殊方法解釋的可用供程序員修改的存儲空間。
二、從unsigned類型修飾符談變量:
31~24 | 23~16 | 15~8 | 7~0 |
三、從變量的類型轉換談變量:
char c = 'a';
int i = c;
打印 i 的值,則爲97,這是安全的轉換,因爲int的內存空間足夠裝下char。下面我們反過來:
int i = 255;
unsigned char c = (char)i;
按照int的類型來打印c,結果是255,這看起來並沒有什麼不妥,但是這是不安全的,如果是256此時就會溢出了。