C语言从入门到精通(第6版)
上QQ阅读APP看书,第一时间看更新

3.4.3 字符型常量

字符型常量与整型、实型有所不同,需要使用定界符进行限制。字符型常量包括两种:字符常量和字符串常量。

1.字符常量

使用一对单直撇引号(' ')括起来的字符就是字符常量,如'A'、'#'、'b'等。

字符常量只能包括一个字符,不能是字符串。例如,'A'是正确的,但用'AB'来表示字符常量就是错误的。

字符常量是区分大小写的。例如,'A'和'a'代表的是不同的字符常量。

' '代表的是定界符,不属于字符常量的一部分。

【例3.1】输出“Fine Day!”(实例位置:资源包\TM\sl\03\01)

在本实例中,使用putchar函数将多个字符常量依次输出,在控制台中显示“Fine Day!”。

    #include <stdio.h>
    int main()
    {
        putchar('F');   /*输出字符常量F*/
        putchar('i');   /*输出字符常量i*/
        putchar('n');   /*输出字符常量n*/
        putchar('e');   /*输出字符常量e*/
        putchar('\0');  /*字符结束标志*/
        putchar('D');   /*输出字符常量D*/
        putchar('a');   /*输出字符常量a*/
        putchar('y');   /*输出字符常量y*/
        putchar('!');   /*输出字符常量!*/
        putchar('\n');  /*进行换行*/
        return 0;
    }

运行程序,显示效果如图3.3所示。

注意

给char型变量赋值时不可以使用3个单引号。这样写编译器会不知道从哪里开始,到哪里结束,进而产生错误。例如,下面的赋值语句会提示“error C2001:newline in constant”错误。

    char cChar='A'';             /*使用3个单引号为字符型赋值*/
2.字符串常量

字符串常量是用一对双直撇引号(" ")括起来的若干字符序列。例如,"Have a good day! "和"beautiful day"即为字符串常量。如果字符串中一个字符都没有,将其称作空串,此时字符串的长度为0。

在C语言中存储字符串常量时,系统会在字符串的末尾自动添加一个“\0”,作为字符串的结束标志。例如,字符串"welcome"在内存中的存储形式如图3.4所示。

图3.3 输出“Fine Day!”

图3.4 “\0”为系统所加

【例3.2】打印《静夜思》诗句(实例位置:资源包\TM\sl\03\02)

在本实例中,使用printf函数将字符串常量《静夜思》诗句在控制台输出显示。

    #include <stdio.h>           /*包含头文件*/
    int main()
    {
        printf("窗前明月光\n");  /*输出字符串*/
        printf("疑是地上霜\n");
        printf("举头望明月\n");
        printf("低头思故乡\n");
        return 0;                /*程序结束*/
    }

运行程序,显示效果如图3.5所示。

字符常量和字符串常量的差别主要体现在以下几个方面。

定界符不同。字符常量使用的是' ',而字符串常量使用的是" "。

长度不同。字符常量只能有一个字符,长度为1。字符串常量的长度可以是0,也可以是任意值。即使字符串常量中的字符只有1个,长度也不是1,而是2。例如,字符串常量"F",其在内存中的存储情况如图3.6所示(因为系统自动添加了结束字符“\0”,所以其长度为2)。

图3.5 输出字符串

图3.6 字符串“F”

存储方式不同。字符常量中存储的是字符的ASCII码值;字符串常量不仅要存储有效的字符,还要存储结尾处的结束标志“\0”。

ASCII码到底是什么呢?在C语言中,所使用的字符被一一映射到一个表中,这个表称为ASCII码表,如表3.2所示。

表3.2 ASCII码表