2.6 字符型数据 一、 字符常量 1、字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,‘A’、‘1’、‘+’等。 2.6 字符型数据 一、 字符常量 1、字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,‘A’、‘1’、‘+’等。 2、转义字符 C语言还允许使用一种特殊形式的字符常量,就是以反斜杠“\ ”开头的转义字符。 【注意】 如果反斜杠或单引号本身作为字符常量,必须使用转 义字符:‘\\’、‘\’‘。
【案例2. 1】 用转义字符输出可打印字符和不可打印字符。 /. 案例代码文件名:AL2_1. C. / / /程序如下/: main() { printf(“\x4F\x4B\x21\n”); /* 等价于printf(“OK!\n”); */ printf(“\x15 \xAB\n”); } 程序运行结果如下: OK! § ½
字符变量的类型关键字为char,一般占用1字节内存单元。 二、字符变量 字符变量的类型关键字为char,一般占用1字节内存单元。 1、变量值的存储 字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。 例如, char ch1, ch2; /*定义两个字符变量:ch1,ch2*/ ch1=’a’; ch2=’b’; /*给字符变量赋值*/
2、特性 字符数据在内存中存储的是字符的ASCII码── 一个无符号整数,其形式与整数的存储形式一样(如图2-6所示),所以C语言允许字符型数据与整型数据之间通用。 (1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。
【案例2. 2】字符变量的字符形式输出和整数形式输出。 /. 案例代码文件名:AL2_2. C. / / main() { char ch1,ch2; ch1='a'; ch2='b'; printf(“ch1=%c,ch2=%c\n”,ch1,ch2); printf(“ch1=%d,ch2=%d\n”,ch1,ch2); } 程序运行结果: ch1=a,ch2=b ch1=97,ch2=98
(2)允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算。 /程序如下/: 【案例2.3】字符数据的算术运算。 /*案例代码文件名:AL2_3.C*/ /*程序功能:字符数据的算术运算*/
main() { char ch1,ch2; ch1=‘a’; ch2=‘B’; /. 字母的大小写转换 main() { char ch1,ch2; ch1=‘a’; ch2=‘B’; /*字母的大小写转换*/ printf(“ch1=%c,ch2=%c\n”,ch1-32,ch2+32); /*用字符形式输出一个大于256的数值*/ printf("ch1+200=%d\n", ch1+200); printf("ch1+200=%c\n", ch1+200); printf("ch1+256=%d\n", ch1+256); printf("ch1+256=%c\n", ch1+256); }
程序运行结果: ch1=A,ch2=b ch1+200=297 ch1+200=) ch1+256=353 ch1+256=a 【思考题】 用字符形式输出一个大于256的数值,会得到什么结果?
三、字符串常量 1、字符串常量的概念和字符串长度 字符串常量是用一对双引号括起来的若干字符序列。 字符串中字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为“ ” (一对紧连的双引号)。 例如,“How do you do.”、“Good morning.”等,都是字符串常量,其长度分别为14和13(空格也是一个字符)。 如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。 例如:(1)C:\msdos\v6.22 → "C:\\msdos\\v6.22" (2)I say:"Goodbye!" → "I say:\"Goodbye!\""
2、字符串的存储 C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个‘\0’作为字符串的结束标志。 【注意】 在源程序中书写字符串常量时,不必加结束字符‘\0’,否则画蛇添足。 如果有一个字符串为“CHINA”,则它在内存中的实际存储如下所示: 最后一个字符'\0'是系统自动加上的,它占用6字节而非5字节内存空间。
综上所述,字符常量'A'与字符串常量"A"是两回事: (1)定界符不同:字符常量使用单引号,而字符串常量使用双引号; (2)长度不同:字符常量的长度固定为1,而有效的字符串常量的长度,至少需要两个字节存储; (3)存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志’\0’。