购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6 字符型数据

字符型数据包括字符型常量、字符型变量和字符串常量。

2.6.1 字符型常量

字符型常量是用一对单引号括起来的单个字符,如'A'、'a'、'X'、'?'、'$'等都是字符型常量。注意单引号是定界符,不是字符型常量的一部分。

在C语言中,字符型常量可以与数值一样在程序中参加运算,其值就是该字符的ASCII码值。例如,字符'A'的数值为十进制数65。

除了以上形式的字符型常量外,C语言还允许用一种特殊形式的字符型常量,即转义字符。转义字符以反斜线“\”开头,后跟一个或几个字符。转义字符具有特定的含义,通常用来表示键盘上的控制代码和某些用于功能定义的特殊符号,如回车符、换页符等。常用的转义字符及其含义见表2.3。

表2.3 常见的转义字符及其含义

转义字符是将反斜杠(\)后面的字符转换成另外的含义。如'\n'不代表字母n而作为“换行”符;'\101'代表ASCII码为(101) 8 的字符“A”;'\x41'代表ASCII码为(41) 16 的字符“A”。

例2.7 转义字符的使用。

程序代码如下:

#include <stdio.h>
int main(){
    int a, b, c;          /* 定义 a 、b 、c 为整数*/
    a=5; b=6; c=7;
    printf("%d\n\t%d  %d\n  %d    %d\t\b%d\n", a, b, c, a, b, c);
    return 0;
}

说明:

程序在第一列输出a的值5之后就是'\n',故回车换行;接着又是'\t',于是跳到下一制表位置(设制表位置间隔为8),再输出b值6;空两格再输出c值7后又是'\n',因此再回车换行;再空两格之后又输出a值5;再空3格又输出b的值6;再次遇'\t'跳到下一制表位置(与上一行的6对齐),但下一转义字符'\b'又使之退回一格,故紧跟着6再输出c的值7。

2.6.2 字符型变量

字符型变量用来存放字符型常量,即单个字符。每个字符型变量被分配一个字节的内存空间,因此一个字节空间只能存放一个字符。

字符型变量的类型声明符为char,字符型变量类型声明的格式如下:

char a, b;           /*定义字符型变量a 和b */
a = 'x', b = 'y';    /*给字符型变量a 和b 分别赋值'x' 和'y' */

将一个字符型常量存放到一个变量中,实际上并不是把该字符本身放到变量内存单元中,而是将该字符相应的ASCII码放到存储单元中。例如,字符'x'的十进制ASCII码是120,字符'y'的十进制ASCII码是121。对字符变量a、b赋予'x'和'y'(a='x'; b='y';),实际上是在a、b两个单元中存放120和121的二进制代码。

(1)a→0 1 1 1 1 0 0 0

(2)b→0 1 1 1 1 0 0 1

因为字符数据在内存中以ASCII码存储,它们的存储形式与整数的存储形式类似,所以也可以把它们看成是整型量。C语言允许对整型变量赋字符值,也允许对字符型变量赋整型值。在输出时,允许把字符数据按整型形式输出,也允许把整型数据按字符形式输出。以字符形式输出时,需要先将存储单元中的ASCII码转换成相应的字符,然后输出;以整数形式输出时,直接将ASCII码值当作整数输出。也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算。

整型数据为2字节或4字节,字符数据为1字节,当整型数据按字符型量处理时,只有低8位参与处理。

例2.8 字符型变量的使用。

程序代码如下:

#include <stdio.h>
int main(){
    char a, b;
    a = 120;
    b = 121;
    printf("%c,%c\n%d,%d\n", a, b, a, b);
    return 0;
}

说明:

本程序中,定义a、b为字符型变量,但在赋值语句中为它们赋予整型值。从结果看,a、b值的输出形式取决于printf函数格式串中的格式符,即当格式符为“%c”时,对应输出的变量值为字符形式;当格式符为“%d”时,对应输出的变量值为整数形式。

例2.9 将小写字母转换成大写字母。

程序代码如下:

#include <stdio.h>
int main(){
    char a, b;
    a = 'x';
    b = 'y';
    a = a-32;                                /* 把小写字母转换成大写字母*/
    b = b-32;
    printf("%c,%c\n%d,%d\n", a, b, a, b);    /* 以字符型和整型输出*/
    return 0;
}

说明:

由于每个小写字母比它相应的大写字母的ASCII码大32,如'a'='A'+32、'b'='B'+32,因此,语句a=a-32;即可将字符型变量a中原有的小写字母转换成大写字母。

2.6.3 字符串常量

字符型常量是由一对单引号括起来的单个字符。C语言除了允许使用字符常量外,还允许使用字符串常量。字符串常量是由一对双引号括起来的字符序列。如"CHINA"、"C program"、"$12.5"等都是合法的字符串常量。

输出一个字符串,例如:

printf("Hello world!");

初学者容易将字符型常量与字符串常量混淆。'a'是字符型常量,"a"是字符串常量,二者不同。假设c被指定为字符型变量,则c='a';是正确的,而c="a";是错误的,即不能把一个字符串赋予一个字符型变量。

那么,'a'和"a"究竟有什么区别呢?C语言规定,在每一个字符串的结尾加一个字符串结束标志,以便系统据此判断字符串是否结束。C语言规定以字符'\0'作为字符串结束标志。'\0'是一个ASCII码为0的字符,也就是空操作字符,即它不引起任何控制动作,也不是一个可显示的字符。字符串"WORLD"在内存中的实际存放形式如图2.7所示。

图2.7 字符串"WORLD"在内存中的实际存放形式

可以看出,字符串"WORLD"在内存中需要6个字节的存储空间,最后一个字节存储的是字符串结束标志'\0'。注意,'\0'是系统自动加上的。同理,"a"实际包含了两个字符:'a'和'\0',因此,把"a"赋予一个字符型变量显然是错误的。

在C语言中,没有专门的字符串变量,字符串如果需要存放在变量中,则需要用字符数组来存放。这部分内容将在后面的章节中介绍。 xCpSp40xAsrR8oBBw6m8M/O7Sqjcphjq0XPYSZyZT9Jg/0QBVCyihPP19+CpFexy

点击中间区域
呼出菜单
上一章
目录
下一章
×