分享

C语言基础知识

 望笑微 2012-12-27

              3.2.4 字符型数据及其表示


  1. 字符型数据
  文字处理是计算机的一个重要应用领域,这个应用领域的程序必须能够使用和处理字符形式的数据。在C语言中,字符型数据包括字符和字符串两种,例如'a'是字符,而"Windows" 是字符串。
  字符型数据在计算机中存储的是字符的ASCII码(ASCII码表见附录A),一个字符的存储占用一个字节。因为ASCII码形式上就是0 到255之间的整数,因此C语言中字符型数据和整型数据可以通用。例如,字符"A"的ASCII码值用二进制数表示是1000001,用十进制数表示是65,在计算机中的存储示意图见图3-6。由图可见,字符"A"的存储形式实际上就是一个整型数65,所以它可以直接与整型数据进行算术运算、混合运算,可以与整型变量相互赋值,也可以将字符型数据以字符或整数两种形式输出。以字符形式输出时,先将ASCII码值转换为相应的字符,然后再输出;以整数形式输出时,直接将ASCII码值作为整数输出。

  2.字符型常量
  字符常量亦被称为字符常数。C语言中字符常量是括在一对单引号内的一个字符。 例如:'x'、'B'、'b'、'$'、'?'、' '(表示空格字符)、'3'都是字符常量,注意其中'B'和'b'是不同的字符常量。
  除了以上形式的字符常量外,对于常用的但却难以用一般形式表示的不可显示字符,C语言提供了一种特殊的字符常量,即用一个转义标识符"\"开头,后续需要的转义字符来表示。常用的转义字符序列的字符常量见表3-4。
表3-4 转义字符序列及其功能
转义字符 功 能
\n 换行
\t 水平跳格
\b 退格
\r 回车
\f 走纸换页
\\ 反斜线字符
\' 单引号字符
\" 双引号字符
\ddd 1至3位八进制数表示的字符
\xdd 1至2位十六进制数表示的字符

  转义字符是一种特殊形式的字符常量,其意思是将转义符"\"后的字符原来的含义进行转换,变成某种另外特殊约定的含义。
  例如,转义字符"\n"中的n已不代表字符常量"n",由于n前面是转义符"\",所以n就转义成换行。转义字符"\015"是"\ddd"形式的转义字符,其中"015"是八进制字符串,它表示了ASCII码表中编码为十进制13的字符,也就是回车。转义字符"\x1f"是"\xdd"形式的转义字符,其中"1f"是十六进制字符串,它表示了ASCII码表中编码为十进制31的字符,也就是▼。
  可见,用转义字符方法可以表示任何可显示或不可显示的字符。在实际应用中,转义字符的使用很多,例如:例3-2中有以下程序行:
  printf("a=%f,b=%f\n",a,b);
  其中的"\n"就是转义字符换行。几乎每个程序中都会有一个或若干个这样的程序行。要注意其使用。


  3. 字符型变量
  字符型变量用于存放字符常量,即一个字符型变量可存放一个字符,所以一个字符型变量占用1个字节的内存容量。说明字符型变量的关键字是   char,使用时只需在说明语句中指明字符型数据类型和相应的变量名即可。例如:
  char s1, s2; /* 说明 s1,s2 为字符型变量 */
  s1='A'; /* 为s1赋字符常量'A' */
  s2='a'; /*为s2赋字符常量'a' */


  4. 字符串常量
  字符串常量是用一对双引号括起来的字符序列。这里的双引号仅起到字符串常量的边界符的作用,它并不是字符串常量的一部分。例如下面的字符串都是合法的字符串常量:
  "I am a student.\n","ABC"," ","a"
  注意不要把字符串常量和字符常量混淆,如"a"和'a'是根本不同的数据,前者是字符串常量,后者是字符常量。如果字符串常数中出现双引号,则要用反斜线'\"'将其转义,取消原有边界符的功能,使之仅作为双引号字符起作用。例如,要输出字符串:
  He says:"How do you do."
  应写成如下形式:
  printf ("He says:\"How do you do.\"");
  C语言对字符串常量的长度不加限制,编译程序总是自动地在字符串的结尾加上一个转义字符'\0'(即ASCII码是0,所对应的字符是空),作为字符串常量的结束标志。对字符串操作时,这个结束标志是非常重要的。例如输出字符串时,遇到这个结束标志才终止输出。
  可见,字符常量与字符串常量的区别有两个方面:从形式上看,字符常量是用单引号括起的单个字符,而字符串常量是用双引号括起的一串字符;从存储方式看,字符常量在内存中占一个字节,而字符串常量除了每个字符各占一个字节外,其字符串结束符'\0'也要占一个字节。例如:字符常量'a'占一个字节,而字符串常量"a" 占2个字节,如图3-7示意图所示。
  C语言没有专门的字符串变量,如果需要处理字符串,一般用字符型数组来实现。关于字符数组及其它字符数据处理问题在本书第八章作详细介绍。


  5. 字符数据的应用举例

  例3-3:计算字符'A'与整型数据25的和。
  /* L3_3.C */
  Main()
  { char a; /* 说明a为字符型变量 */
  int b; /* 说明b为整型变量 */
  a='A'; /* 为a赋字符常量'A' */
  b=a+25; /* 计算65+25并赋值给字符变量b */
  printf("%c,%d,%c,%d\n",a,a,b,b); /* 分别以字符型和整型两种格式输出a、b */
  }
  程序运行的输出结果如下:
  A,65,Z,90
  上述程序中a变量的值是'A',实际存放的是'A'的ASCII码65,它可直接与十进制整型常量25相加,所得整型数据90赋值给变量b,而90是大写字符'Z'的ASCII码,所以可以将a、b变量分别以字符型和整型两种格式输出。可见字符型数据和整型数据是可以通用的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多