在字符集中,有一類字符具備這樣的特性:當從鍵盤上輸入這個字符時,顯示器上就能夠顯示這個字符,即輸入什麼就顯示什麼。這類字符稱爲可顯示字符,如a、b、c、$、+和空格符等都是可顯示字符。編程
另外一類字符卻沒有這種特性。它們或者在鍵盤上找不到對應的一個鍵(固然能夠用特殊方式輸入),或者當按鍵之後不能顯示鍵面上的字符。其實,這類字符是爲控制做用而設計的,故稱爲控制字符。函數
在C語言中,構成字符常量的控制字符必須用轉義字符表示。轉義字符是一種以「\」開頭的字符。例如退格符用'\b'表示,換行符用'\n'表示。轉義字符中的'\'表示它後面的字符已失去它原來的含義,轉變成另外的特定含義。反斜槓與其後面的字符一塊兒構成一個特定的字符。spa
轉義字符是C語言中表示字符的一種特殊形式。轉義字符以反斜'\'開頭,後面跟一個字符或一個八進制或十六進制數表示。轉義字符具備特定的含義,不一樣於字符原有的意義,故稱轉義字符。設計
一般使用轉義字符表示ASCII碼字符集中不可打印的控制字符和特定功能的字符,如用於表示字符常量的單撇號('),用於表示字符串常量的雙撇號(")和反斜槓(\)等。code
例如,下面例子printf函數的格式串中用到的'\n'就是一個轉義字符,其意義是「回車換行」。轉義字符主要用來表示那些用通常字符不便於表示的控制代碼。blog
經常使用的轉義字符及其含義字符串
\ddd 三位八進制get
\xhh 二位十六進制it
ASCAII碼範圍表class
數字 0---9 表示: 48--57
大寫字母表示: 65---90
小寫字母表示: 97---122
NUL 空字符 CR回車 LF換行
從表中能夠看出,在C語言中有三種轉義字符,它們是:通常轉義字符、八進制轉義字符和十六進制轉義字符。
\b、\f、\n、\r、\t,以及 \v 都是輸出設備控制符。退格符(\b)使當前行的活躍位置後退一個位置。換頁符(\f)使活躍位置跳到下一頁的開端。注:換頁符可用於控制打印機換頁,但不會致使 PC 機的顯示屏換頁。換行符(\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' 。這是由於前者易懂、便於記憶,並且移植性更高。
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。
可見,字符集中的全部字符均可以用十六進制轉義字符表示。
由上可知,使用八進制轉義字符和十六進制轉義字符,不只能夠表示控制字符,並且也能夠表示可顯示字符。但因爲不一樣的計算機系統上採用的字符集可能不一樣,所以,爲了能使所編寫的程序能夠方便地移植到其餘的計算機系統上運行,程序中應少用這種形式的轉義字符。
轉義字符的使用
例:
1 void main()
2 {
3 int a,b,c;
4 a=5; b=6; c=7;
5 printf("%d\n\t%d %d\n %d %d\t\b%d\n",a,b,c,a,b,c);
6 }
此程序練習轉義字符的使用:
a、b、c分別爲整數5,6,7
調用printf顯示程序運行結果:
5
67
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
DEF
6)轉義字符也能夠出如今字符串中,但只做爲一個字符看待。
例 求下面字符串的長度
「\026[12,m」 長度爲6
「\0mn」 長度爲0。