商務英語計算機英語

c語言char的用法

本文已影響 2W人 

C語言程序設計 課程是高等院校計算機專業基礎課程之一,其教學效果直接影響學生在計算機方面的應用。下面來個大家介紹c語言char的用法。

ing-bottom: 75%;">c語言char的用法

C語言基本類型:字符型(char)用法介紹

1.字符型(char)簡介

字符型(char)用於儲存字符(character),如英文字母或標點。嚴格來說,char 其實也是整數類型(integer type),因爲 char 類型儲存的實際上是整數,而不是字符。計算機使用特定的整數編碼來表示特定的字符。美國普遍使用的編碼是 ASCII(American Standard Code for Information Interchange 美國信息交換標準編碼)。例如:ASCII 使用 65 來代表大寫字母 A,因此存儲字母 A 實際上存儲的是整數65。注意:許多IBM大型機使用另一種編碼——EBCDIC(Extended Binary-Coded Decimal Interchange Code 擴充的二進制編碼的十進制交換碼);不同國家的計算機使用的編碼可能完全不同。

ASCII 的範圍是 0 到 127,故而 7 位(bit)就足以表示全部 ASCII。char 一般佔用 8 位內存單元,表示ASCII綽綽有餘。許多系統都提供擴展ASCII(Extended ASCII),並且所需空間仍然在 8 位以內。注意,不同的系統提供的擴展 ASCII 的編碼方式可能有所不同!

許多字符集超出了 8 位所能表示的範圍(例如漢字字符集),使用這種字符集作爲基本字符集的系統中,char 可能是 16 位的,甚至可能是 32 位的。總之,C 保證 char 佔用空間的大小足以儲存系統所用的基本字符集的編碼。C 語言定義一個字節(byte)的位數爲 char 的位數,所以一個字節可能是 16 位,也可能是 32 位,而不僅僅限於 8 位。

2. 聲明字符型變量

字符型變量的聲明方式和其它類型變量的聲明方式一樣:

char good;

char better, best;

以上代碼聲明瞭三個字符型變量:good、better,和 best。

3. 字符常量與初始化

我們可以使用以下語句來初始化字符型變量:

char ch = 'A';

這個語句把 ch 的值初始化爲 A 的編碼值。在這個語句中,'A' 是字符常量。C 語言中,使用單引號把字符引起來就構成字符常量。我們來看另外一個例子:

char fail; /* 聲明一個字符型變量 */

fail = 'F'; /* 正確 */

fail = "F"; /* 錯!"F" 是字符串字面量 */

把字符用雙引號引起來構成字符串字面量,所以第三個語句是錯誤的。我們會在後續的教程中討論字符串,現在暫且把它放下。

因爲字符實質上是以數字的形式存儲的,所以我們可以直接使用數字來初始化字符變量,或者給字符變量賦值:

char ch = 65; /* 不好的風格 */

在 ASCII 中,A 的編碼是 65,所以對於使用 ASCII 的系統來說,這個語句等同於 char ch = 'A';。使用非 ASCII 的系統中,65 代表的不一定是 A,而有可能是其它任何字符,所以使用數字來初始化字符變量,或者給字符變量賦值是一種不好的風格,因爲移植性太差了!但是,使用字符常量(例如 'A')來初始化字符變量,或者給字符變量賦值,字符變量得到的一定是我們所期待的字符的編碼值。例如:

char ch = 'A';

無論在使用任何編碼的系統中,ch 都能夠得到字符 A 所對應的編碼值。這是因爲編譯器會自動把 'A' 轉化成 A 所對應的編碼值。因此,我們應該使用字符常量來初始化字符變量,或者給字符變量賦值;而不要用數字。

有趣的是,C 使用 int 類型來處理字符常量,而不是 char 類型。例如,在使用32位 int 的ASCII 系統中,以下代碼

char ch = 'C';

'C' 的編碼值 67 被存儲於 32 位的內存單元中;不過 ch 仍然存儲於 8 位的內存單元中,只是它的值變成了 67。因此,我們可以定義形如 'good' 的古怪字符常量。因爲每個字符的編碼值佔用 8 位的內存單元,所以這個常量剛好可以存儲於 32 位的內存單元。然而,用這種字符常量初始化字符變量,或者給字符變量賦值的話,導致的結果是,字符變量只能得到字符常量的最後 8 位。也就是說,以下代碼

char ch = 'good';

ch 得到的是 'd' 的值。

以後,在沒有特殊說明的情況下,我們討論的都是 ASCII。

ASCII值

控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符

0 NUL 32 (space) 64 @ 96 `

1 SOH 33 ! 65 A 97 a

2 STX 34 " 66 B 98 b

3 ETX 35 # 67 C 99 c

4 EOT 36 $ 68 D 100 d

5 ENQ 37 % 69 E 101 e

6 ACK 38 & 70 F 102 f

7 BEL 39 ' 71 G 103 g

8 BS 40 ( 72 H 104 h

9 HT 41 ) 73 I 105 i

10 LF 42 * 74 J 106 j

11 VT 43 + 75 K 107 k

12 FF 44 , 76 L 108 l

13 CR 45 - 77 M 109 m

14 SO 46 . 78 N 110 n

15 SI 47 / 79 O 111 o

16 DLE 48 0 80 P 112 p

17 DC1 49 1 81 Q 113 q

18 DC2 50 2 82 R 114 r

19 DC3 51 3 83 S 115 s

20 DC4 52 4 84 T 116 t

21 NAK 53 5 85 U 117 u

22 SYN 54 6 86 V 118 v

23 ETB 55 7 87 W 119 w

24 CAN 56 8 88 X 120 x

25 EM 57 9 89 Y 121 y

26 SUB 58 : 90 Z 122 z

27 ESC 59 ; 91 [ 123 {

28 FS 60 < 92 124 |

29 GS 61 = 93 ] 125 }

30 RS 62 > 94 ^ 126 ~

31 US 63 ? 95 _ 127 DEL

NUL 空字符 VT 垂直製表 SYN 同步

SOH 標題開始 FF 走紙控制 ETB 信息組傳送結束

STX 正文開始 CR 回車 CAN 作廢

ETX 正文結束 SO 移位輸出 EM 媒介結束 End of Medium

EOT 傳輸結束 SI 移位輸入 SUB 換置

ENQ 詢問字符 DLE Data Link Escape ESC Escape

ACK 確認 DC1 設備控制1 FS 文件分隔符

BEL 響鈴 DC2 設備控制2 GS 組分隔符

BS 退格 DC3 設備控制3 RS 記錄分隔符

HT 橫向製表 DC4 設備控制4 US 單元分隔符

LF 換行 NAK 否定 DEL 刪除

4.不可打印字符(Nonprinting Characters)

有些 ASCII 字符是不可打印的。例如退格、另起一行、警報等。C 語言提供了兩種方法來表示這種不可打印字符。

第一種方法是使用 ASCII 編碼。例如,ASCII 編碼中,7 用於表示警報:

char beep = 7;

第二種方法是使用特殊符號序列,也就是所謂的轉義字符escape sequences)。參見下表:(

轉義字符 含義

a 警報( Alert (ANSI C) )

b 退格(Backspace)

f 換頁(Form feed)

換行(Newline)

回車(Carriage return)

t 水平製表符(Horizontal tab)

v 垂直製表符(Vertical tab)

反斜杆( Backslash () )

' 單引號( Single quote (') )

" 雙引號( Double quote (") )

? 問號( Question mark (?) )