商務英語計算機英語

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 (?) )