寬字元

Unicode或者寬字元都沒有改變char資料型態在C中的含義。char繼續表示1個位元組的儲存空間, sizeof (char) 繼續返回1。理論上,C中1個位元組可比8位元長,但對我們大多數人來說,1個位元組(也就是1個char)是8位元寬。

定義,指針,

定義

C中的寬字元基於wchar_t資料型態,它在幾個表頭檔案包括WCHAR.H中都有定義,像這樣:
typedef unsigned short wchar_t ;
因此,wchar_t資料型態與無符號短整數型態相同,都是16位元寬。
要定義包含一個寬字元的變數,可使用下面的語句:
wchar_t c = 'A' ;
變數c是一個雙位元組值0x0041,是Unicode表示的字母A。(然而,因為Intel微處理器從最小的位元組開始儲存多位元組數值,該位元組實際上是以0x41、0x00的順序保存在記憶體中。如果檢查Unicode文字的電腦儲存應注意這一點。)

指針

您還可定義指向寬字串的指針:
wchar_t * p = L"Hello!" ;
注意緊接在第一個引號前面的大寫字母L(代表「long」)。這將告訴編譯器該字串按寬字元保存-即每個字元占用2個位元組。通常,指針變數p要占用4個位元組,而字串變數需要14個位元組-每個字元需要2個位元組,末尾的0還需要2個位元組。
同樣,您還可以用下面的語句定義寬字元陣列:
static wchar_t a[] = L"Hello!" ;
該字串也需要14個位元組的儲存空間,sizeof (a) 將返回14。索引陣列a可得到單獨的字元。a[1] 的值是寬字元「e」,或者0x0065。
雖然看上去更像一個印刷符號,但第一個引號前面的L非常重要,並且在兩個符號之間必須沒有空格。只有帶有L,編譯器才知道您需要將字串存為每個字元2位元組。稍後,當我們看到使用寬字串而不是變數定義時,您還會遇到第一個引號前面的L。幸運的是,如果忘記了包含L,C編譯器通常會給提出警告或錯誤資訊。
您還可在單個字元文字前面使用L字首,來表示它們應解釋為寬字元。如下所示:
wchar_t c = L'A' ;
但通常這是不必要的,C編譯器會對該字元進行擴充,使它成為寬字元。

相關詞條

熱門詞條

聯絡我們