資料型別-常量與變數
前言
首先,在正式介紹常量與變數之前,我們需要宣告C語言中正確的命名方法。
正如我們在給檔案命名時所遵循的命名規則,我們在給C語言變數和常量命名時也需要遵循一定的規則。在變數中,我們稱之為識別符號(用來標識常量,變數,函式的字元序列)。
一般情況下,C語言命名有如下規則:
1)名稱由字母,數字,下劃線組成。
2)第一個(即開頭)不能是數字。
3)C語言中大小寫敏感。 //e.g.:A與a表示不同的變數/常量
4)不能使用關鍵字。
C語言中的關鍵字一部分如下:
int | float | double | char | short | long | signed | unsigned |
---|---|---|---|---|---|---|---|
if | else | switch | case | default | for | while | do |
break | continue | return | void | const | sizeof | struct | typedef |
static | extern | auto | register | enum | goto | union | volatile |
另一部分為系統內建函式。
常量
常量大致分為以下幾類分類
1)符號常量
概念:用識別符號代替常量。
語法:define 符號常量 常量
目的:為了使程式具有可拓展性與可移植性。
樣例:#define PI 3.1415926 //我們把圓周率用PI替換,在程式中需要使用圓周率時,我們不需要一個一個的鍵入3.1415926……而是用一個PI代替之
2)直接常量
概念:用識別符號儲存常用資料型別常量。
語法:資料型別 常量名 常量值
分類:
整型常量:
十進位制:由0~9與+/-組成
八進位制:由0開頭,後面為0~7組成
十六進位制:由ox開頭,後面為 0~9 和 a~f 組成 //備註:你知道你的QQ號電腦可以用十六進位制登入嗎?想要一個帥氣的QQ登入介面嗎,快把QQ轉換為十六進位制吧!別忘記了加0x哦。
實型常量:
十進位制:同上。
指數型:格式控制符為%e,後面我們會講到,輸出為科學計數法樣式。預設為double型。
字元常量:
注意:字元常量與符號常量不一個概念。符號常量用來替換後面的常量表達式,後面可以跟函式。字元常量為一個數據型別,格式控制符為%c,用來儲存一個字元,例如'a'。
概念:單引號括起來的單個普通字元或者轉義字元
樣例: char a='a';
字串常量:
C語言中字串儲存有兩種形式:字元陣列和字元指標(C++STL庫中有一個string,不過C語言並沒有這種資料型別)。
概念:字串,顧名思義,即一串字元。在C語言中,用雙引號括起來。
字串常量的另一個特點為末尾自動加'\0'作為字串的結束標誌。
原因:字串長度不固定。'\0'表示無意義。所以可以作為字元結束標誌。
變數
定義:資料型別 變數1,變數n;
遵循先定義,後使用原則。
位置一般放在開頭。
理解這個概念,我們先插入如下說法:
1、計算機要處理的資料(諸如數字、文字、符號、圖形、音訊、視訊等)是以二進位制的形式存放在記憶體中的;
2、我們將8個位元(Bit)稱為一個位元組(Byte),並將位元組作為最小的可操作單元。
我們不妨舉一個例子來說明一下:
生活中我們會找一個小箱子來存放物品,一來顯得不那麼凌亂,二來方便以後找到。計算機也是這個道理,我們需要先在記憶體中找一塊區域,規定用它來存放整數,並起一個好記的名字,方便以後查詢。
1)那麼,C語言中這樣在記憶體中找一塊區域:
int a;//int即為:Integer的簡寫,意思是整數。a是我們給這塊區域起的名字;
按照上面的例子:我們很好理解這句話的意思:在記憶體中找一塊區域,命名為 a,用它來存放整數。
注意 int 和 a 之間是有空格的,它們是兩個詞。也注意最後的分號,int a表達了完整的意思,是一個語句,要用分號來結束。
不過int a;
僅僅是在記憶體中找了一塊可以儲存整數的區域,那麼如何將數字放進去呢?
2)C語言中這樣向記憶體中放整數:
a=1314;
'='是一個新符號,在C語言中,這個過程叫做賦值(Assign)。賦值是指把資料放到記憶體的過程。
與之相對應的有一個叫做初始化的概念,即在定義的時候賦值,也就是在找到一個箱子的時候把東西放進去
int a=1314;
補充:
1)先定義變數,再初始化:
int a;
a=1314;
2)定義同時進行初始化:
int a=1314;
當然,a中的整數不是一成不變的,只要我們需要,隨時可以更改。
更改的方式就是再次賦值,例如:
int a=1314;
a=521;
第二次賦值,會把第一次的資料覆蓋(擦除)掉,也就是說,a 中最後的值是521.
因為a的值可以改變,所以我們給它起了一個形象的名字,叫做變數(Variable)
資料型別
資料是放在記憶體中的,變數是給這塊記憶體起的名字,有了變數就可以找到並使用這份資料。
在C語言中,int 有一個專業的稱呼,叫做資料型別(Data Type)。
顧名思義,資料型別用來說明資料的型別,確定了資料的解釋方式,讓計算機和程式設計師不會產生歧義。在C語言中,有多種資料型別,我們常用的資料型別有以下幾種:
說 明 | 字元型 | 短整型 | 整型 | 長整型 | 單精度浮點型 | 雙精度浮點型 | 無型別 |
---|---|---|---|---|---|---|---|
資料型別 | char | short | int | long | float | double | void |
資料長度
所謂資料長度(Length),是指資料佔用多少個位元組。佔用的位元組越多,能儲存的資料就越多,對於數字來說,值就會更大,反之能儲存的資料就有限。多個數據在記憶體中是連續儲存的,彼此之間沒有明顯的界限,如果不明確指明資料的長度,計算機就不知道何時存取結束。例如我們儲存了一個整數 1000,它佔用4個位元組的記憶體,而讀取時卻認為它佔用3個位元組或5個位元組,這顯然是不正確的。所以,在定義變數時還要指明資料的長度。而這恰恰是資料型別的另外一個作用。資料型別除了指明資料的解釋方式,還指明瞭資料的長度。因為在C語言中,每一種資料型別所佔用的位元組數都是固定的,知道了資料型別,也就知道了資料的長度。
在32位環境中,各種資料型別的所佔用的位元組數一般如下:
說 明 | 字元型 | 短整型 | 整型 | 長整型 | 單精度浮點型 | 雙精度浮點型 |
---|---|---|---|---|---|---|
資料型別 | char | short | int | long | float | double |
長 度 | 1 | 2 | 4 | 4 | 4 | 8 |
其次,我們也可以使用sizeof()
函式來求一個數據型別所佔用的位元組說。例如:sizeof(int)
.
我們還需要明白一點,在程式設計中,儲存整數的資料型別的大小關係為:short,int,long 為非遞減順序。
即\(short\leqslant int\leqslant long\)
最後:資料型別只在定義變數時指明,而且必須指明;使用變數時無需再指明,因為此時的資料型別已經確定了。