C語言基礎知識

3.2.4 字元型數據及其表示1. 字元型數據文字處理是計算機的一個重要應用領域,這個應用領域的程序必須能夠使用和處理字元形式的數據。在C語言中,字元型數據包括字元和字元串兩種,例如"a"是字元,而"Windows" 是字元串。字元型數據在計算機中存儲的是字元的ASCII碼(ASCII碼錶見附錄A),一個字元的存儲佔用一個位元組。因為ASCII碼形式上就是0 到255之間的整數,因此C語言中字元型數據和整型數據可以通用。例如,字元"A"的ASCII碼值用二進位數表示是1000001,用十進位數表示是65,在計算機中的存儲示意圖見圖3-6。由圖可見,字元"A"的存儲形式實際上就是一個整型數65,所以它可以直接與整型數據進行算術運算、混合運算,可以與整型變數相互賦值,也可以將字元型數據以字元或整數兩種形式輸出。以字元形式輸出時,先將ASCII碼值轉換為相應的字元,然後再輸出;以整數形式輸出時,直接將ASCII碼值作為整數輸出。

2.字元型常量字元常量亦被稱為字元常數。C語言中字元常量是括在一對單引號內的一個字元。 例如:"x"、"B"、"b"、"$"、"?"、" "(表示空格字元)、"3"都是字元常量,注意其中"B"和"b"是不同的字元常量。除了以上形式的字元常量外,對於常用的但卻難以用一般形式表示的不可顯示字元,C語言提供了一種特殊的字元常量,即用一個轉義標識符""開頭,後續需要的轉義字元來表示。常用的轉義字元序列的字元常量見表3-4。表3-4 轉義字元序列及其功能轉義字元 功 能
換行 水平跳格 退格
回車f 走紙換頁\ 反斜線字元" 單引號字元" 雙引號字元ddd 1至3位八進位數表示的字元xdd 1至2位十六進位數表示的字元轉義字元是一種特殊形式的字元常量,其意思是將轉義符""後的字元原來的含義進行轉換,變成某種另外特殊約定的含義。例如,轉義字元"
"中的n已不代表字元常量"n",由於n前面是轉義符"",所以n就轉義成換行。轉義字元"15"是"ddd"形式的轉義字元,其中"015"是八進位字元串,它表示了ASCII碼錶中編碼為十進位13的字元,也就是回車。轉義字元"x1f"是"xdd"形式的轉義字元,其中"1f"是十六進位字元串,它表示了ASCII碼錶中編碼為十進位31的字元,也就是▼。可見,用轉義字元方法可以表示任何可顯示或不可顯示的字元。在實際應用中,轉義字元的使用很多,例如:例3-2中有以下程序行:printf("a=%f,b=%f
",a,b);其中的"
"就是轉義字元換行。幾乎每個程序中都會有一個或若干個這樣的程序行。要注意其使用。3. 字元型變數字元型變數用於存放字元常量,即一個字元型變數可存放一個字元,所以一個字元型變數佔用1個位元組的內存容量。說明字元型變數的關鍵字是   char,使用時只需在說明語句中指明字元型數據類型和相應的變數名即可。例如:char s1, s2; /* 說明 s1,s2 為字元型變數 */s1="A"; /* 為s1賦字元常量"A" */s2="a"; /*為s2賦字元常量"a" */4. 字元串常量字元串常量是用一對雙引號括起來的字元序列。這裡的雙引號僅起到字元串常量的邊界符的作用,它並不是字元串常量的一部分。例如下面的字元串都是合法的字元串常量:"I am a student.
","ABC"," ","a"注意不要把字元串常量和字元常量混淆,如"a"和"a"是根本不同的數據,前者是字元串常量,後者是字元常量。如果字元串常數中出現雙引號,則要用反斜線"""將其轉義,取消原有邊界符的功能,使之僅作為雙引號字元起作用。例如,要輸出字元串:He says:"How do you do."應寫成如下形式:printf ("He says:"How do you do."");C語言對字元串常量的長度不加限制,編譯程序總是自動地在字元串的結尾加上一個轉義字元""(即ASCII碼是0,所對應的字元是空),作為字元串常量的結束標誌。對字元串操作時,這個結束標誌是非常重要的。例如輸出字元串時,遇到這個結束標誌才終止輸出。可見,字元常量與字元串常量的區別有兩個方面:從形式上看,字元常量是用單引號括起的單個字元,而字元串常量是用雙引號括起的一串字元;從存儲方式看,字元常量在內存中佔一個位元組,而字元串常量除了每個字元各佔一個位元組外,其字元串結束符""也要佔一個位元組。例如:字元常量"a"佔一個位元組,而字元串常量"a" 佔2個位元組,如圖3-7示意圖所示。C語言沒有專門的字元串變數,如果需要處理字元串,一般用字元型數組來實現。關於字元數組及其它字元數據處理問題在本書第八章作詳細介紹。5. 字元數據的應用舉例

例3-3:計算字元"A"與整型數據25的和。/* L3_3.C */Main(){ char a; /* 說明a為字元型變數 */int b; /* 說明b為整型變數 */a="A"; /* 為a賦字元常量"A" */b=a+25; /* 計算65+25並賦值給字元變數b */printf("%c,%d,%c,%d
",a,a,b,b); /* 分別以字元型和整型兩種格式輸出a、b */}程序運行的輸出結果如下:A,65,Z,90上述程序中a變數的值是"A",實際存放的是"A"的ASCII碼65,它可直接與十進位整型常量25相加,所得整型數據90賦值給變數b,而90是大寫字元"Z"的ASCII碼,所以可以將a、b變數分別以字元型和整型兩種格式輸出。可見字元型數據和整型數據是可以通用的。
推薦閱讀:

TAG:語言 | 知識 | 基礎知識 | C語言 | 基礎 |