C语言的数据类型→字符型数据
一、字符常量
C语言的字符常量是用单撇号括起来的一个字符。
如:'a' 、'x' 、'D' 、 '?' 、 '$' 等都是字符常量。
注意:'a' 、 'A'是不同的字符常量。
C语言有一个特殊之处,就是允许用一种特殊形式的字符常量,就是以一个字符“\”开头的字符序列。
二、常用的以“\”开头的特殊形式见下表:
转义字符及其作用
说明:上表中列出的字符称为“转义字符”,意思是将反斜杠“\”后面的字符转换成另外的意义。如“\n”中的“n”不代表字母n而作为“换行”符。
上表中倒数第二行是一个ASCII码(八进制数)表示一个字符:
例如“\101”代表ASCII码(八进制数)为101的字符“A”。
八进制数101相当于十进制数65,而ASCII为65代表的字符是大写字母'A'。
“\012”代表八进制数12(即十进制数的10)的ASCII码所对应的字符“换行”符。
用上表中的方法可以表示任何可输出的字母字符、专用字符、图形字符和控制字符。
注意:“\0”或“\000”是代表ASCII码为0的控制字符,即“空操作”字符。它常用在字符串中。
例如:
三、字符变量
字符型变量用来存放字符常量,它只能存放一个字符,不要以为在一个字符变量中可以放一个字符串(包括若干字符)。
字符变量的定义形式如下:
char c1,c2;
它表示c1和c2为字符型变量,各可以放一个字符,因此在本函数中可以用下面语句对c1、c2赋值:
c1='a' ; c2='b' ;
在所有的编译系统中都规定以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节。
四、字符数据在内存中的存储形式及其使用方法
将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。
例如字符'a'的ASCII代码为十进制数97,'b'的ASCII代码为十进制数98,在内存中变量c1、c2的值如下图(a)所示:
实际上是以二进制形式存放的,如下图(b)所示:
既然在内存中,字符数据是以ASCII码存储,它的存储形式就与整数的存储形式类似。这样就使字符型数据和整型数据之间可以通用。一个字符型数据既可以以字符型输出,也可以以整数形式输出。以字符形式输出时,需要先将存储单元中的ASCII码转换成相应字符,然后输出。也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算。
例如:向字符变量赋予整数:
说明:c1,c2被指定为字符变量。在第五行和第六行中,将整数97和98分别赋予c1,c2,它的作用相当于以下两个赋值语句:
c1='a';c2='b';
因为'a'和'b'的ASCII码为97和98。总结:字符型数据和整型数据是通用的。但是我们应该注意,字符型数据只占一个字节,它只能存放0 … 255范围内的整数(详细见下面的“特别强调”)。
例如:大小写字母的转换。
说明:程序的作用是将两个小写字母a和b转换成大写字母A和B。
我们可以从代码中可以看到每一个小写字母比它相应的大写字母的ASCII码大32。C语言允许字符数据与整数直接进行算术运算。
C语言对字符数据做这种处理使程序设计时增大了*度。例如对字符做各种转换就比较方便:
字符数据与整型数据可以互相赋值:
int i;
char c;
i='a';
c=97;
上述赋值是合法的。如果用格式符“%d”将i的值输出可得到97。用“%c”输出可得到字符'a'。
如果在上面语句之后执行以下语句:
printf(""%c,%d\n",c,c);
printf("%c,%d\n",i,i);
输出:
a,97
a,97
特别强调的是:有些系统(如Turbo C)将字符变量定义为signed char型。其存储单元中的最高位作为符号位,它的取值范围是-128…127。如果在字符变量中存放一个ASCII码为0…127间的字符,由于字节中最高位为0,所以用%d输出字符变量时,输出的是一个正整数。如果在字符变量中存放一个ASCII码为128…255间的字符,由于在字节中最高位为1,用%d格式输出时,就会得到一个负整数。
如果不想按有符号处理,可以将字符变量定义为unsigned char类型,这时其取值范围是0…255。signed char和unsigned char的含义及用法与signed int 和unsigned int 相仿,但它只有一个字节。
五、字符串常量
字符常量是由一对单撇号括起来的单个字符。
字符串常量是一对双撇号括起来的字符序列。
如:"How do you do." , "CHINA" ,"a" , "$123.45"
可以输出一个字符串:printf("How do you do.");
注意:我们千万不能将字符常量与字符串常量混淆。'a'是字符常量,"a"是字符串常量,二者不同。
假设c被指定为字符变量:
char c;
c='a';
是正确的。
而
c="a";
是错误的。
c="CHINA";
也是错误的。不能把一个字符串常量赋给一个字符变量。
注意:'a'和"a"究竟有什么区别?
C语言规定:在每一个字符串常量的结尾加一个“字符串标志”,以便系统据此判断字符串是否结束。C语言以字符'\0'作为字符串结束标志。'\0'是一个ASCII码为0的字符,从ASCII代码中可以看到ASCII码为0的字符是“空操作字符”,即它不引起任何控制动作,也不是一个可显示的字符。如果有一个串常量"CHINA",实际上在内存中是:
它占内存单元不是5个字符,而是6个字符,最后一个字符为'\0'。但在输出时不输出'\0'。例如printf("How do you do.");,从第一个字符开始逐个输出字符,直到遇到最后的'\0'字符,就知道字符串结束,停止输出。
注意:在写字符串时不必加'\0',否则会画蛇添足。'\0'字符是系统自动加上的。字符串"a"实际上包含2个字符:'a'、'\0',因此,想把它赋给只能容纳一个字符的字符变量c显然是不行的。
c="a"; /*错误,c是字符变量*/
在C语言中没有专门的字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。
转载于:https://blog.51cto.com/fxgjg/347796