2.3 字符型(char)
加上不同的修飾符, 可以定義有符號和無符號兩種類型的字符型變量, 例如:
char a: /*a被定義為有符號字符變量*/
unsigned char l; /*l被定義為無符號字符變量*/
字符在計算機中以其ASCII碼方式表示, 其長度為1個字節, 有符號字符型數取值范圍為-128~127, 無符號字符型數到值范圍是0~255。因此在Turbo C語言中,字符型數據在操作時將按整型數處理, 如果某個變量定義成char,則表明該變量是有符號的, 即它將轉換成有符號的整型數。
Turbo C中規定對ASCII碼值大於0x80的字符將被認為是負數。例如ASCII值為0x8c的字符,定義成char時,被轉換成十六進制的整數0xff8c。這是因當ASCII碼值大於0x80時,該字節的最高位為1,計算機會認為該數為負數,對於0x8c表示的數實際上是-74(8c的各位取反再加1),而-74轉換成兩字節整型數並在計算機中表示時就是0xff8c(對0074各位取反再加1)。因此只有定義為
unsigned char 0x8c轉換成整型數時才是8c。這一點在處理大於0x80的ASCII碼字符時(例如漢字碼)要特別注意。一般漢字均定義為unsigned char(在以後的程序中會經常碰到)。
另外,也可以定義一個字符型數組(關於數組後面再作詳細介紹),此時該數組表示一個字符串。
例如:
char str[10];
計算機在編譯時, 將留出連續10個字符的空間, 即str[0]到str[9]共10個變量,但只有前9個供用戶使用。第10個str[9]用來存放字符串終止符NULL即"\0",但終止符是編編譯程序自動加上的, 這一點應特別注意。
二、字符常數表示
能用符號表示的字符可直接用單引號括起來表示, 如'a', '9', 'Z', 也可用該字符的ASCII碼值表示, 例如十進制數85表示大寫字母'U', 十六進制數0x5d表示 ']', 八進制數0102表示大寫字母'B'。
一些不能用符號表示的控制符, 只能用ASCII碼值來表示, 如十進制數10 表示換行,下六進制數0x0d表示回車, 八進制數033表示Esc。Turbo C2.0中也有另外一種表示表示方法, 如'\033'表示Esc, 這裡'\ 0' 符號後面的數字表示十六進制的ASCII值當然這種表示方法也適用於可睦接用符號表示的字符。
另外, Turbo C2.0中有些常用的字符用以下特殊規定來表示:
規定符 等價於 含義
'\f' '\X0C' 換頁
'\r' '\X0D' 回車
'\t' '\X09' 制表鍵
'\n' '\X0A' 換行
'\\' '\X5C' \符
'\'' '\X27' '符
'\"' '\X22' "符
對於字符串常量, 一般用雙引號括起來表示, 如"Hello Turbo C2.0"。
2.4 指針型(*)
指針是一種特殊的數據類型, 在其它語言中一般沒有。指針是指向變量的地址,實質上指針就是存貯單元的地址。根據所指的變量類型不同,可以是整型指針(int *)、浮點型指針(float *)、字符型指針(char *)、結構指針(struct *)和聯合指針(union *)(結構指針和聯合指針將在第4節中介紹)。
2.5 無值型(void)
無值型字節長度為0, 主要有兩個用途: 一是明確地表示一個函數不返回任何值; 一是產生一個同一類型指針(可根據需要動態分配給其內存)。
例如:
void *buffer; /*buffer被定義為無值型指針*/