在字符集中,有一類字元具有這樣的特性:當從鍵盤上輸入這個字元時,顯示器上就可以顯示這個字元,即輸入什麼就顯示什麼。這類字元稱為可顯示字元,如a、b、c、$、+和空格符等都是可顯示字元。
另一類字元卻沒有這種特性。它們或者在鍵盤上找不到對應的乙個鍵(當然可以用特殊方式輸入),或者當按鍵以後不能顯示鍵面上的字元。其實,這類字元是為控制作用而設計的,故稱為控制字元。
在c語言中,構成字元常量的控制字元必須用轉義字元表示。
轉義字元是一種以「\」開頭的字元。例如退格符用'\b'表示,換行符用'\n'表示。轉義字元中的'\'表示它後面的字元已失去它原來的含義,轉變成另外的特定含義。反斜槓與其後面的字元一起構成乙個特定的字元。
轉義字元是c語言中表示字元的一種特殊形式。
轉義字元以反斜'\'開頭,後面跟乙個字元或乙個八進位制或十六進製制數表示。轉義字元具有特定的含義,不同於字元原有的意義,故稱轉義字元。
通常使用轉義字元表示ascii碼字符集中不可列印的控制字元和特定功能的字元,如用於表示字元常量的單撇號('),用於表示字串常量的雙撇號(")和反斜槓(\)等。
例如,下面例子printf函式的格式串中用到的'\n'就是乙個轉義字元,其意義是「回車換行」。轉義字元主要用來表示那些用一般字元不便於表示的控制**。
常用的轉義字元及其含義
注:1,
\v垂直製表和\f換頁符對螢幕沒有任何影響,但會影響印表機執行響應操作。
2,\n其實應該叫
回車換行
。換行只是換一行,不改變游標的橫座標;回車只是回到行首,不改變游標的縱座標。
3,\t 游標向前移動四格或八格,可以在編譯器裡設定
4,\' 在字元裡(即單引號裡)使用。在字串裡(即雙引號裡)不需要,只要用 ' 即可。效果是一樣的。
5,\? 其實不必要。只要用 ? 就可以了
(在windows vc6 和tc2 中驗證)。
\b、\f
、\n、\r
、\t,以及 \v
都是輸出裝置控制符。
退格符(\b
)使當前行的活躍位置後退乙個位置。
換頁符(\f
換行符(回車換行)(\n
)使活躍位置跳到下一行的開端。
回車符 ( \r
)使活躍位置返回當前行的開端。
水平製表符(\t
)使活躍位置移動若干個位置(通常是8個)。
垂直製表符(\v
)使活躍位置換若干行。注:\v
可用於控制印表機換若干行,但是不會導致pc機的顯示屏換行。
如果要列印以下句子:
"\ is called 'backslash'."
我們需要使用如下語句:
printf("\"\\ is called \'
backslash\'
.\"");或者
printf("\"\\ is called '
backslash'
.\"");
注意,在字串字變數(" ")中,無論寫 \'
還是 '
,輸出都是一樣的。但是,在給字元變數(' ')賦值時,一定要寫 \'
。例如:
char ch = ''
'; (錯誤)(語法錯誤會報錯的)
char ch = '\'
'; (正確)
\0oo
和 \xhh
是ascii碼的兩種特殊表示形式。
如果想用八進位制ascii碼表示字元,可以在八進位制數前面加上 \
,然後用單引號引起來。例如:
beep = '\007';
打頭的那些
0可以省略,也就是說,寫成
'\07'
或者 '\7'
都一樣。無論有沒有打頭的0,
7都會被當成八進位制數處理。
從 c89 開始,c提供了用十六進製制表示字元常量的方法:在反斜桿後面寫乙個 x ,然後再寫 1 到 3 個十六進製制數字。例如:
nl = '\xa';
注意:使用ascii碼時,要注意區分數字和數字字元。例如:字元4的
ascii
碼是52
,'4'
代表字元
4,而不是數字
4。此外,儘管
'\n'
和 '\xa'
,'\a'
和 '\007'
是等價的,但是我們應該盡可能使用
'\n'
和 '\a'
,而不要用
'\xa'
和 '\007'
。這是因為前者易懂、便於記憶,而且移植性更高。
從表中可以看出,在c語言中有三種轉義字元,它們是:一般轉義字元、八進位制轉義字元和十六進製制轉義字元。
1. 一般轉義字元
這種轉義字元,雖然在形式上由兩個字元組成,但只代表乙個字元。常用的一般轉義字元為:
\a \n \t \v \b \r \f \\ \』 \"
細心的讀者可能已經發現,轉義字元'\\'代表的反斜槓"\"、轉義字元』\』』代表的字元"'"和轉義字元'\"'代表的字元""",其本身就是可顯示字元,為什麼還要對它轉義呢?
這是因為它們的原有的字元形式已作它用,其中,單引號用作區分字元常量的括號,雙引號用作區分字串(下面將要介紹字串)的括號,而反斜槓本身已用來表示轉義字元的開頭,因此必須對它們用轉義字元重新宣告。
2. 八進位制轉義字元
它是由反斜槓'\'和隨後的1~3個八進位制數字構成的字串行。例如,'\60'、'\101'、'\141'分別表示字元'0'、'a'和'a'。因為字元'0'、'a'和'a'的ascii碼的八進位制值分別為60、101和141。
字符集中的所有字元都可以用八進位制轉義字元表示。
如果你願意,可以在八進位制數字前面加上乙個0來表示八進位制轉移字元。
3. 十六進製制轉義字元
它是由反斜槓'\'和字母x(或x)及隨後的1~2個十六進製制數字構成的字串行。例如,'\x30'、'\x41'、'\x61'分別表示字元'0'、'a'和'a'。因為字元'0'、'a'和'a'的ascii碼的十六進製制值分別為0x30、0x41和0x61。
可見,字符集中的所有字元都可以用十六進製制轉義字元表示。
由上可知,使用八進位制轉義字元和十六進製制轉義字元,不僅可以表示控制字元,而且也可以表示可顯示字元。但由於不同的計算機系統上採用的字符集可能不同,因此,為了能使所編寫的程式可以方便地移植到其他的計算機系統上執行,程式中應少用這種形式的轉義字元。
轉義字元的使用
例:void main()
此程式練習轉義字元的使用:
a、b、c分別為整數5,6,7
呼叫printf顯示程式執行結果:567
56 7
程式在第一列輸出a值5之後就是「\n」,故回車換行;接著又是「\t」,於是跳到下一製表位置(設製表位置間隔為8),再輸出b值6和c 值7;後又是"\n",因此再回車換行;之後又輸出a值5和b值6;再次後"\t"跳到下一製表位置(與上一行的6 對齊),但下一轉義字元「\b」又使退回一格,故緊挨著6再輸出c值7。
使用轉義字元時需要注意以下問題:
1)轉義字元中只能使用小寫字母,每個轉義字元只能看作乙個字元。
2)\v垂直製表和\f換頁符對螢幕沒有任何影響,但會影響印表機執行響應操作。
3)在c程式中,使用不可列印字元時,通常用轉義字元表示。
4)轉義字元』\0』表示空字元null,它的值是0。而字元'0'的ascii碼值是48。因此,空字元』\0』不是字元0。另外,空字元不等於空格字元,空格字元的ascii碼值為32而不是0。程式設計序時,讀者應當區別清楚。
5) 如果反斜線之後的字元和它不構成轉義字元,則』\』不起轉義作用將被忽略。
例如:printf(「a\nbc\ndef\n」);
輸出:anbc
def6)轉義字元也可以出現在字串中,但只作為乙個字元看待。
例 求下面字串的長度
「\026[12,m」 長度為6
「\0mn」
長度為0。(想想:為什麼不是2)(字串長度計算出來為0,但是所占用的空間為4位元組。
應該是"\0mn"吧,"\0"是字串的結尾,這個字串其實只有"\0",後面的mn不是字串的內容,這其實就是個空字串,只有"\0"佔了乙個位元組的位置,所以長度為1
C語言中的轉義字元
c語言中的轉義字元 在字符集中,有一類字元具有這樣的特性 當從鍵盤上輸入這個字元時,顯示器上就可以顯示這個字元,即輸入什麼就顯示什麼。這類字元稱為可顯示字元,如a b c 和空格符等都是可顯示字元。另一類字元卻沒有這種特性。它們或者在鍵盤上找不到對應的乙個鍵 當然可以用特殊方式輸入 或者當按鍵以後不...
C語言中的轉義字元
c語言中的轉義字元 在字符集中,有一類字元具有這樣的特性 當從鍵盤上輸入這個字元時,顯示器上就可以顯示這個字元,即輸入什麼就顯示什麼。這類字元稱為可顯示字元,如a b c 和空格符等都是可顯示字元。另一類字元卻沒有這種特性。它們或者在鍵盤上找不到對應的乙個鍵 當然可以用特殊方式輸入 或者當按鍵以後不...
C語言中的轉義字元
在字符集中,有一類字元具有這樣的特性 當從鍵盤上輸入這個字元時,顯示器上就可以顯示這個字元,即輸入什麼就顯示什麼。這類字元稱為可顯示字元,如a b c 和空格符等都是可顯示字元。另一類字元卻沒有這種特性。它們或者在鍵盤上找不到對應的乙個鍵 當然可以用特殊方式輸入 或者當按鍵以後不能顯示鍵面上的字元。...