小伙伴們有沒有想過什么是C常量,什么是C變量?為什么它們是編程世界的重要組成部分?在今天就帶小伙伴一起學習和了解C語言中的常量和變量。

常量:
1、整型常量(整常數)
整型常量是整數類型的數據。可用以下三種形式表示,具體如下:
十進制整數,123,-456,0;
八進制整數,如0123,-011;
十六進制整數,如0x123,-0x12。
2、 實型常量
實型常量也稱為浮點數常量,也就是在數學中用到的小數,可以分為 float 單精度浮點數和 double 雙精度浮點數兩種類型。其中,單精度浮點數后面以F 或 f 結尾,而雙精度浮點數則以 D 或 d 結尾。當然,在使用浮點數時也可以在結尾處不加任何的后綴。浮點數常量還可以通過指數形式來表示,具體示例如下:
2e3f 3.6d 0f 3.84d 5.022e+23f
3、 字符常量
字符常量用於表示一個字符,一個字符常量要用一對英文半角格式的單引號(' ')引起來,它可以是英文字母、數字、標點符號以及由轉義序列來表示的特殊字符。具體示例如下:
'a' '1' '&' '\r' '0x20'
上面的示例中,'0x20'表示一個空白字符,即在單引號之間只有一個表示空白的空格。之所以能這樣表示是因為C 語言采用的是 ASCII 字符集,空格字符在 ASCII 碼表(文章底部)中對應的值為'0x20'。

變量
在程序運行期間,隨時可能產生一些臨時數據,應用程序會將這些數據保存在一些內存單元中,每個內存單元都用一個標識符來標識。這些內存單元我們稱之為變量,定義的標識符就是變量名,內存單元中存儲的數據就是變量的值。具體如下:
int x = 0,y;
y = x+3;
上面的代碼中,第一行代碼的作用是定義了兩個變量 x 和 y,也就相當於分配了兩塊內存單元,在定義變量的同時為變量 x 分配了一個初始值 0,而變量 y沒有分配初始值,變量 x 和 y在內存中的狀態如下圖所示。

第二行代碼的作用是為變量賦值,在執行第二行代碼時,程序首先取出變量x的值,與3相加后,將結果賦值給變量y,此時變量 x 和 y在內存中的狀態發生了變化,如下圖所示。

從上圖以及上面的描述不難發現,變量實際上就是一個臨時存放數據的地方。在程序中,可以將指定的數據存放到變量中,方便隨時取出來再次進行使用。
變量的數據類型

從上圖中可以看出,C 語言中的數據類型可分為 4 種,分別是基本類型、構造類型、指針類型、空類型。
1、整型變量
在程序開發中,經常會遇到 0、-100、1024 等數字,這些數字都可稱為整型。整型就是一個不包含小數部分的數。在C 語言中,根據數值的取值范圍,可以將整型定義為短整型(shortint)、基本整型(int)和長整型(longint)。下表列舉了整數類型的長度及其取值范圍。
整數類型的長度及其取值范圍

從上表中可以看出,整數類型可分為 short、int 和 long,這三種類型可以被 signed 和 unsigned 修飾。其中,被 signed 修飾的整數類型稱為有符號的整數類型,被unsigned 修飾的稱為無符號的整數類型。它們之間最大的區別是無符號類型可以存放的正數范圍比有符號類型中的范圍大一倍。例如,int 的取值范圍是 -231~231-1,而unsigned int 的取值范圍是 0~232-1。默認情況下,整型數據都是有符號的,此時signed 修飾符可以不用寫。需要注意的是,整型數據在內存中占的字節數與所選擇的操作系統有關。雖然 C 語言標准中沒有明確規定整型數據的長度,但 long類型整數的長度不能短於 int 類型,short類型整數的長度不能短於 int 類型。

2、實型變量
實型變量也可以稱為浮點型變量,浮點型變量是用來存儲小數數值的。在 C 語言中,浮點型變量分為兩種:單精度浮點數(float)、雙精度浮點數(double),但是 double 型變量所表示的浮點數比 float 型變量更精確。下表列舉了兩種不同浮點型數所占用的存儲空間大小及取值范圍。
浮點類型長度及其取值范圍

表中列出了兩種浮點數類型變量所占的空間大小和取值范圍。在取值范圍中,E 表示以 10 為底的指數,E后面的“+”號和“-”號代表正指數和負指數,例如,1.4E-45 表示 1.4*10-45。在 C 語言中,一個小數會被默認為 double 類型的值,因此在為一個float 類型的變量賦值時需要注意一點,所賦值的后面一定要加上字母“F”(或者小寫“f”),而為 double類型的變量賦值時,其所賦值后面的字符“D”(或小寫“d”),可以省略。具體示例如下:
float f = 123.4f;
//為一個float類型的變量賦值,后面必須加上字母f
double d1 = 100.1;
//為一個double類型的變量賦值,后面可以省略字母d
double d2 = 199.3d;
//為一個double類型的變量賦值,后面可以加上字母d
另外,在程序中也可以為一個浮點數類型變量賦予一個整數數值,示例如下:
float f = 100; //聲明一個float類型的變量並賦整數值
double d = 100; //聲明一個double類型的變量並賦整數值
float 和double 之間的數據轉換
由於浮點型變量是由有限的存儲單元組成的,因此只能提供有限的有效數字。在有效位以外的數字將被舍去,這樣可能會產生一些誤差,例如,將 3.141592612 賦給一個 float 型變量,但它只能保證前 7 位是有效的,即便成3.141593。
3、字符型變量
字符型變量用於存儲一個單一字符,在 C語言中用 char 表示,其中每個字符變量都會占用 1 個字節。在給字符型變量賦值時,需要用一對英文半角格式的單引號(' ')把字符括起來,例如,'A'的聲明方式如下所示:
char ch = 'A'; //為一個char類型的變量賦值字符'a'
上述代碼中,將字符常量'A'放到字符變量ch 中,實際上並不是把該字符本身放到變量的內存單元中去,而是將該字符對應的 ASCII 編碼放到變量的存儲單元中。例如:ASCII使用編號 65 來對應大寫字母“A”,因此變量 ch存儲的是整數 65,而不是字母“A”本身。通過一個案例來說明,如例所示。
1
#include <stdio.h>
2
void main()
3
{
4
char ch1 = 'A';
5
char ch2 = 65;
6
printf("%c\n", ch1);
7
printf("%c\n", ch2);
8
}
運行結果如圖所示。

例中,定義了兩個char 類型變量,分別賦值為字符'A'和數字65,然后通過 printf 函數把兩個變量的內容以字符形式打印到屏幕上。從圖中可以看出,兩個變量輸出的結果是一樣的,這說明對於字符型來說,A和 65 其實沒什么區別。嚴格來說,字符類型也是整型類型。需要注意的是,除了可以直接從鍵盤上輸入的字符(如英文字母,標點符號,數字,數學運算符等)以外,還有一些字符是無法用鍵盤直接輸入的,比如,“回車”,此時需要采用一種新的定義方式——轉義字符,它以反斜杠\開頭,隨后接特定的字符。下表列舉了一些常見的轉義字符。
部分常見轉義字符表

ASCII碼表
計算機使用特定的整數編碼來表示對應的字符。我們通常使用的英文字符編碼是 ASCII(American Standard Code forInformation Interchange 美國信息交換標准編碼)。ASCII 編碼是一個標准,其內容規定了把英文字母、數字、標點、字符轉換成計算機能識別的二進制數的規則,並且得到了廣泛認可和遵守。下表為ASCII 碼表的可打印字符部分(0 ~ 127),供大家查閱使用,如表2-6 所示。
表2-6 ASCII碼表

在這篇教程中,我們細致的討論了如何定義C語言中常量或字符,以及其他可用的常量類型。在完成本教程之后,你已經基本掌握了C語言的常量和字符的知識。當然,如果還有遺漏之處,歡迎大家留言指出。