# 5.C語言字符型數據
字符型數據包括字符常量和字符變量。
## 字符常量
字符常量是用單引號括起來的一個字符。例如:
'a'、'b'、'='、'+'、'?'
都是合法字符常量。
在C語言中,字符常量有以下特點:
* 字符常量只能用單引號括起來,不能用雙引號或其它括號。
* 字符常量只能是單個字符,不能是字符串。
* 字符可以是字符集中任意字符。但數字被定義為字符型之后就不能參與數值運算。如'5'和5 是不同的。'5'是字符常量,不能參與運算。
## 轉義字符
轉義字符是一種特殊的字符常量。轉義字符以反斜線"\"開頭,后跟一個或幾個字符。轉義字符具有特定的含義,不同于字符原有的意義,故稱“轉義”字符。例如,在前面各例題printf函數的格式串中用到的“\n”就是一個轉義字符,其意義是“回車換行”。轉義字符主要用來表示那些用一般字符不便于表示的控制代碼。
常用的轉義字符及其含義
| 轉義字符 | 轉義字符的意義 | ASCII代碼 |
|---|---|---|
| \n | 回車換行 | 10 |
| \t | 橫向跳到下一制表位置 | 9 |
| \b | 退格 | 8 |
| \r | 回車 | 13 |
| \f | 走紙換頁 | 12 |
| \\ | 反斜線符"\" | 92 |
| \' | 單引號符 | 39 |
| \” | 雙引號符 | 34 |
| \a | 鳴鈴 | 7 |
| \ddd | 1~3位八進制數所代表的字符 | ? |
| \xhh | 1~2位十六進制數所代表的字符 | ? |
廣義地講,C語言字符集中的任何一個字符均可用轉義字符來表示。表中的\ddd和\xhh正是為此而提出的。ddd和hh分別為八進制和十六進制的ASCII代碼。如\101表示字母"A" ,\102表示字母"B",\134表示反斜線,\XOA表示換行等。
【例3-8】轉義字符的使用。
~~~
main(){
int a,b,c;
a=5; b=6; c=7;
printf(" ab c\tde\rf\n");
printf("hijk\tL\bM\n");
}
~~~
## 字符變量
字符變量用來存儲字符常量,即單個字符。字符變量的類型說明符是char。字符變量類型定義的格式和書寫規則都與整型變量相同。例如:
char a,b;
## 字符數據在內存中的存儲形式及使用方法
每個字符變量被分配一個字節的內存空間,因此只能存放一個字符。字符值是以ASCII碼的形式存放在變量的內存單元之中的。
如x的十進制ASCII碼是120,y的十進制ASCII碼是121。對字符變量a、b賦予'x'和'y'值:
a='x';
b='y';
實際上是在a、b兩個單元內存放120和121的二進制代碼:

所以也可以把它們看成是整型量。C語言允許對整型變量賦以字符值,也允許對字符變量賦以整型值。在輸出時,允許把字符變量按整型量輸出,也允許把整型量按字符量輸出。
整型量為二字節量,字符量為單字節量,當整型量按字符型量處理時,只有低八位字節參與處理。
【例3-9】向字符變量賦以整數。
~~~
main(){
char a,b;
a=120;
b=121;
printf("%c,%c\n",a,b);
printf("%d,%d\n",a,b);
}
~~~
本程序中定義a,b為字符型,但在賦值語句中賦以整型值。從結果看,a,b值的輸出形式取決于printf函數格式串中的格式符,當格式符為"c"時,對應輸出的變量值為字符,當格式符為"d"時,對應輸出的變量值為整數。
【例3-10】
~~~
main(){
char a,b;
a='a';
b='b';
a=a-32;
b=b-32;
printf("%c,%c\n%d,%d\n",a,b,a,b);
}
~~~
本例中,a,b被說明為字符變量并賦予字符值,C語言允許字符變量參與數值運算,即用字符的ASCII 碼參與運算。由于大小寫字母的ASCII 碼相差32,因此運算后把小寫字母換成大寫字母。然后分別以整型和字符型輸出。
## 字符串常量
字符串常量是由一對雙引號括起的字符序列。例如: "CHINA" , “C program” , "$12.5" 等都是合法的字符串常量。字符串常量和字符常量是不同的量。它們之間主要有以下區別:
* 字符常量由單引號括起來,字符串常量由雙引號括起來。
* 字符常量只能是單個字符,字符串常量則可以含一個或多個字符。
* 可以把一個字符常量賦予一個字符變量,但不能把一個字符串常量賦予一個字符變量。在C語言中沒有相應的字符串變量。這是與BASIC 語言不同的。但是可以用一個字符數組來存放一個字符串常量。在數組一章內予以介紹。
* 字符常量占一個字節的內存空間。字符串常量占的內存字節數等于字符串中字節數加1。增加的一個字節中存放字符"\0" (ASCII碼為0)。這是字符串結束的標志。
例如,字符串 "C program" 在內存中所占的字節為:

字符常量'a'和字符串常量"a"雖然都只有一個字符,但在內存中的情況是不同的。
'a'在內存中占一個字節,可表示為:

"a"在內存中占二個字節,可表示為:

- 前言
- 一. C語言概述
- 1.C語言的發展及其版本
- 2.C語言工作原理和運行機制
- 3.C語言編譯器(開發工具|IDE)推薦
- 4.C語言的特點
- 5.第一個C語言程序
- 6.C語言輸出函數(printf)和輸入函數(scanf)
- 7.C語言程序的結構特點
- 8.C語言字符集
- 9.C語言詞匯
- 二. C語言算法
- 1.什么是算法|算法的概念
- 2.簡單的C語言算法舉例
- 3.C語言算法的特性
- 4.用流程圖表示算法
- 5.三種基本結構的流程圖
- 6.用N-S流程圖表示算法
- 7.用計算機語言表示算法
- 三. 數據類型和運算符
- 1.C語言的數據類型
- 2.C語言常量與變量
- 3.C語言整型數據
- 4.C語言實型數據
- 5.C語言字符型數據
- 6.C語言變量賦初值
- 7.C語言數據類型轉換
- 8.C語言算術運算符和算術表達式
- 9.C語言賦值運算符和賦值表達式
- 10.C語言逗號運算符和逗號表達式
- 四. 順序程序設計
- 1.C語言語句概述
- 2.C語言賦值語句詳解
- 3.C語言數據的輸入輸出
- 4.C語言字符的輸入輸出
- 7.C語言順序結構程序設計舉例
- 五. 分支結構
- 1.C語言關系運算符和表達式
- 2.C語言邏輯運算符和表達式
- 3.C語言if語句詳解
- 4.C語言switch語句的用法詳解
- 5.C語言條件運算符和條件表達式
- 6.C語言分支結構程序舉例
- 六. 循環控制
- 1.C語言循環控制概述
- 2.C語言goto語句以及用goto語句構成循環
- 3.C語言while語句的用法
- 4.C語言do-while語句的用法
- 5.C語言for語句用法詳解
- 6.C語言幾種循環的比較
- 7.C語言break和continue語句的用法
- 8.C語言循環控制程序舉例
- 七. C語言數組
- 1.C語言一維數組的定義和引用
- 2.C語言二維數組的定義和引用
- 3.C語言字符數組及其應用
- 4.C語言常用字符串處理函數
- 5.C語言數組應用舉例
- 6.C語言數組小結
- 八. C語言函數
- 1.C語言函數概述
- 2.C語言函數的定義
- 3.C語言函數的參數和返回值
- 4.C語言函數的調用
- 5.C語言函數的嵌套調用
- 6.C語言函數的遞歸調用
- 7.C語言數組作為函數參數
- 8.C語言局部變量和全局變量
- 9.C語言變量的存儲類別
- 九. 預處理命令
- 1.C語言預處理概述
- 2.C語言無參數宏定義
- 3.C語言帶參數宏定義
- 4.C語言文件包含命令
- 5.C語言條件編譯詳解
- 6.C語言預處理指令總結
- 十. C語言指針
- 1.C語言指針的概念
- 2.C語言指針變量
- 3.C語言指針變量作為函數參數
- 4.C語言指針變量的運算
- 5.C語言數組指針
- 6.C語言通過指針引用數組
- 7.C語言數組名作函數參數
- 8.C語言指向多維數組的指針
- 9.C語言字符串指針
- 10.C語言字符串指針變量與字符數組的區別
- 11.C語言函數指針變量
- 12.C語言指針型函數
- 13.C語言指針數組的概念
- 14.C語言指向指針的指針
- 15.C語言main函數參數
- 16.關于指針的總結
- 十一. 結構體和共用體
- 1.C語言結構體的定義
- 2.C語言結構類型變量的說明
- 3.C語言結構變量成員的表示方法
- 4.C語言結構變量的賦值
- 5.C語言結構變量的初始化
- 6.C語言結構體數組的定義
- 7.C語言指向結構體變量的指針
- 8.C語言指向結構體數組的指針
- 9.C語言結構體指針變量作函數參數
- 10.C語言動態存儲分配
- 11.C語言鏈表的概念
- 12.C語言枚舉類型
- 13.C語言類型定義符typedef
- 十二. 位運算
- 1.C語言位運算符詳解
- 2.C語言位域(位段)
- 3.關于位運算的總結
- 十三. 文件操作
- 1.C語言文件概述
- 2.C語言文件指針
- 3.C語言文件的打開與關閉
- 4.C語言文件的讀寫
- 5.C語言文件的隨機讀寫
- 6.C語言文件檢測函數
- 7.C語言庫文件(頭文件)有哪些
- 8.文件操作小結