C编程从入门到实践
上QQ阅读APP看书,第一时间看更新

4.6.1 字符常量

字符常量是用单引号“'”括起来的一个字符,例如’a'、'b'、'='、'+'、'?’等。在C语言中,字符常量有如下3个特点。

❑ 字符常量只能用单引号括起来,不能用双引号或其他括号。

❑ 字符常量只能是单个字符,不能是字符串。

❑ 字符可以是字符集中的任意字符。但数字定义为字符型数据之后就不能参与数值运算了。如’5’和5是不同的。'5’是字符常量,不能参与运算。

除了上述形式的字符常量外,C语言有一种特殊形式的字符常量,它是以“\”开头的字符序列。例如,在printf函数中出现的“\n”代表一个换行符。它是一种“控制字符”,在屏幕上是不能显示的。在程序中无法用一个一般形式的字符来表示,只能采用特殊形式来表示。

常用的以“\”开头的特殊字符如表4-3所示。

表4-3 常用转义字符的说明

表4-3列出的字符称为“转义字符”,它的意思是将反斜杠(\)后面的字符换成另外的意义。如’\n’中的“n”不代表字母n而作为“回车换行”符。

在表4-3中最后的两行是用ASCII码(八进制数)表示的一个字符,例如’\101’代表ASCII码为65(十进制数)的字符“A”。'\012'(十进制为10)代表“换行”。用’\376’代表图形字符“■”。用表4-2中的方法可以表示任何可输出的字母字符、专用字符、图形字符和控制字符。请注意'\0’或’\000’代表的是ASCII码为0的控制字符,即“空操作”字符,它将用在字符串中。

实例4-4

通过转义字符输出指定的文本字符

源码路径daima\4\4-4

本实例的实现文件为“trance.c”,具体代码如下。

    #include <stdio.h>
    int main(void)
    {
        //输出双引号内的各个字符
        printf(" ab c\t de\rf\tg\n");
        printf("h\ti\b\bj k"); //输出双引号内的各个字符
    }

拓展范例及视频二维码

范例4-4-01:使用转义字符输出整数

源码路径:演练范例\4-4-01\

范例4-4-02:二级C笔试选择题

源码路径:演练范例\4-4-02\

在上述代码中,程序并没有预设字符变量,用printf函数直接输出双引号内的各个字符。其中第1个printf函数在第1行左端开始输出“ab c”,遇到“\t”(它的作用是“跳格”)后跳到下一个“制表位置”,在我们所用系统中一个“制表区”占8列。“下一制表位置”从第9列开始,故在第9~11列输出“de”。遇到“\r”【它代表“回车”(不换行)】后返回到本行最左端(第1列),输出字符“f”,然后遇到“\t”后再令当前输出位置移到第9列,输出“g”。“\n”的作用是,使当前位置移到下一行的开头。第2个printf函数先在第1列输出字符“h”,后面的“\t”的作用是使当前位置跳到第9列,输出字母“i”,然后令当前位置移到下一列(第10列)准备输出下一个字符。下面遇到两个“\b”,“\b”的作用是“退一格”,因此“\b\b”的作用是使当前位置回退到第8列,接着输出字符“j k”。

运行上述程序后将输出转移后的字符,执行效果如图4-5所示。

图4-5 执行效果

在使用转义字符时,必须注意以下几点。

(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":长度为1。

下面的实例演示了使用字符串常量的过程。

实例4-5

使用字符串常量

源码路径daima\4\4-5

本实例的实现文件为“zichang.c”,具体代码如下。

    #include<stdio.h>           /*包含头文件*/
    int main(void){
        printf("我爱足球!\n"); /*输出字符串*/
        return 0;               /*程序结束*/
    }

拓展范例及视频二维码

范例4-5-01:变量的内存寻址练习1

源码路径:演练范例\4-5-01\

范例4-5-02:变量的内存寻址练习2

源码路径:演练范例\4-5-02\

代码编写完毕后,执行效果如图4-6所示。

图4-6 执行效果