二、宽字符和C语言—Char数据型态

假定我们都非常熟悉在C程序中使用char数据型态来定义和储存字符跟字符串。但为了便于理解C如何处理宽字符,让我们先回顾一下可能在Win32程序中出现的标准字符定义。

下面的语句定义并初始化了一个只包含一个字符的变量:

char c = 'A' ;
        

变量c需要1个字节来保存,并将用十六进制数0x41初始化,这是字母A的ASCII代码。

您可以像这样定义一个指向字符串的指针:

char * p ;
        

因为Windows是一个32位操作系统,所以指针变量p需要用4个字节保存。您还可初始化一个指向字符串的指针:

char * p = "Hello!" ;
        

像前面一样,变量p也需要用4个字节保存。该字符串保存在静态内存中并占用7个字节-6个字节保存字符串,另1个字节保存终止符号0。

您还可以像这样定义字符数组:

char a[10] ;
        

在这种情况下,编译器为该数组保留了10个字节的储存空间。表达式sizeof(a)将返回10。如果数组是整体变量(即在所有函数外定义),您可使用像下面的语句来初始化一个字符数组:

char a[] = "Hello!" ;
        

如果您将该数组定义为一个函数的区域变量,则必须将它定义为一个static变量,如下:

static char a[] = "Hello!" ;
        

无论哪种情况,字符串都储存在静态程序内存中,并在末尾添加0,这样就需要7个字节的储存空间。