字符型數據包括字符常量和字符變量。
C語言中的字符常量包括ASCII碼字符集中的所有字符,分為可顯示字符和不可顯示字符。一個字符常量占1個字節(8位)的內存單元,字符在內存中以ASCII碼值的形式存儲,如a的ASCII值為97,它在計算機內部的存儲形式為:
0〖〗1〖〗1〖〗0〖〗0〖〗0〖〗0〖〗1字符常量有兩種表示形式:
(1)用單引號括起來的一個字符,如A、a、8、+、@等。字符常量隻能用單引號括起來,不能用雙引號或其他符號。字符常量隻能是單個字符,不能包含多個字符。字符常量可以是字符集中的任意字符,但數字被定義成字符型後就不能參與數值運算,如5和5是不同的,5是字符常量,5是數值常量。
(2)轉義字符,用單引號括起來的由反斜杠“\”開頭的一個字符或一個數字序列。轉義字符是一種特殊的字符常量,具有特定含義,不同於字符原有的意義,故稱為“轉義”字符。如printf函數的格式串中用到的“\n”就是一個轉義字符,其含義是“回車換行”。轉義字符主要用來表示那些用一般字符不便於表示的控製代碼。表33列出了常用轉義字符及其含義。
[例36]轉義字符的使用。
voidmain()
{
printf("abc\tde\rf\n");
printf("hijk\tL\bM\n");
printf("%c,%c,%c\n",A,\101,\x41);
}
運行結果:
fabc凵凵de
hijk凵凵凵凵M
A,A,A
程序分析:
第一個printf函數先在第一行左端輸出abc,遇到“\t”,跳到下一個製表位,在微機係統中一個製表位占8列,下一個製表位從第9列開始,在9~10列上輸出de,遇到“\r”,返回本行最左端第1列,輸出字符f,最後遇到“\n”,使當前位置移到下一行的開頭。
第二個printf函數先在1~4列上輸出hijk,遇到“\t”,跳到第9列,輸出L,當前位置是第10列,準備輸出下一個字符,遇到“\b”,作用是退一格,當前位置回退到第9列,輸出M,原來第9列上的字符L被取代,最後遇到“\n”,使當前位置移到下一行的開頭。
第三個printf函數以字符的形式輸出A、\101和\x41,其中轉義字符\101和\x41都是字符A的等價表示。
字符變量用來存儲字符常量,一個字符變量占一個字節內存單元,隻能存放一個字符常量。字符變量的類型說明符是char,字符變量類型定義的格式和書寫規則都與其他基本類型變量相同。例如:
charch1,ch2;/*定義兩個字符型變量ch1,ch2*/
1.字符數據在內存中的存放形式
每個字符變量被分配一個字節的內存空間,因此隻能存放一個字符。字符值以ASCII碼的形式存放在變量的內存單元之中。例如對字符變量a,b賦值“m”和“n”,即:
a=m;b=n;
由於“m”的十進製ASCII碼是109,“n”的十進製ASCII碼是110,實際上是在a、b兩個單元內存放109和110的二進製代碼。