当前位置:  编程技术>c/c++/嵌入式

C 语言基础教程(我的C之旅开始了)[六]

    来源: 互联网  发布时间:2014-10-11

    本文导语:  14. 基本数据类型:字符型(上) 1.字符型(char)简介           字符型(char)用于储存字符(character),如英文字母或标点。严格来说,char 其实也是整数类型(integer type),因为 char 类型储存的实际上是整数,而不是字...

14. 基本数据类型:字符型(上)
1.字符型(char)简介
 
        字符型(char)用于储存字符(character),如英文字母或标点。严格来说,char 其实也是整数类型(integer type),因为 char 类型储存的实际上是整数,而不是字符。计算机使用特定的整数编码来表示特定的字符。美国普遍使用的编码是 ASCII(American    Standard    Code   for    Information   Interchange  美国信息交换标准编码)。例如:ASCII 使用 65 来代表大写字母 A,因此存储字母 A 实际上存储的是整数65。注意:许多IBM大型机使用另一种编码——EBCDIC(Extended Binary-Coded Decimal Interchange Code 扩充的二进制编码的十进制交换码);不同国家的计算机使用的编码可能完全不同。
        ASCII 的范围是 0 到 127,故而 7 位(bit)就足以表示全部 ASCII。char 一般占用 8 位内存单元,表示ASCII绰绰有余。许多系统都提供扩展ASCII(Extended ASCII),并且所需空间仍然在 8 位以内。注意,不同的系统提供的扩展 ASCII 的编码方式可能有所不同!
        许多字符集超出了 8 位所能表示的范围(例如汉字字符集),使用这种字符集作为基本字符集的系统中,char 可能是 16 位的,甚至可能是 32 位的。总之,C 保证 char 占用空间的大小足以储存系统所用的基本字符集的编码。C 语言定义一个字节(byte)的位数为 char 的位数,所以一个字节可能是 16 位,也可能是 32 位,而不仅仅限于 8 位。
 
 
2.声明字符型变量
 
        字符型变量的声明方式和其它类型变量的声明方式一样:
 
              char good;
              char better, best;
 
以上代码声明了三个字符型变量:good、better,和 best。
 
 
3.字符常量与初始化
 
        我们可以使用以下语句来初始化字符型变量:
 
              char ch = 'A';
 
这个语句把 ch 的值初始化为 A 的编码值。在这个语句中,'A' 是字符常量。C 语言中,使用单引号把字符引起来就构成字符常量。我们来看另外一个例子:
 
              char fail;         /* 声明一个字符型变量        */
              fail = 'F';          /* 正确                      */
              fail = "F";       /* 错!"F" 是字符串常量      */
 
把字符用双引号引起来构成字符串常量,所以第三个语句是错误的。我们会在后续的教程中讨论字符串,现在暂且把它放下。
        因为字符实质上是以数字的形式存储的,所以我们可以直接使用数字来初始化字符变量,或者给字符变量赋值:
 
              char ch = 65; /* 不好的风格 */
 
在 ASCII 中,A 的编码是 65,所以对于使用 ASCII 的系统来说,这个语句等同于 char ch = 'A';。使用非 ASCII 的系统中,65 代表的不一定是 A,而有可能是其它任何字符,所以使用数字来初始化字符变量,或者给字符变量是一种不好的风格,因为移植性太差了!但是,使用字符常量(例如 'A')来初始化字符变量,或者给字符变量赋值,字符变量得到的一定是我们所期待的字符的编码值。例如:
 
              char ch = 'A';
 
无论在使用任何编码的系统中,ch 都能够得到字符 A 所对应的编码值。这是因为编译器会自动把 'A' 转化成 A 所对应的编码值。因此,我们应该使用字符常量来初始化字符变量,或者给字符变量赋值;而不要用数字。
       有趣的是,C 使用 int 类型来处理字符常量,而不是 char 类型。例如,在使用32位 int 的ASCII 系统中,以下代码
 
              char ch = 'C';
 
'C' 的编码值 67 被存储于 32 位的内存单元中;不过 ch 仍然存储于 8 位的内存单元中,只是它的值变成了 67。因此,我们可以定义形如 'good' 的古怪字符常量。因为每个字符的编码值占用 8 位的内存单元,所以这个常量刚好可以存储于 32 位的内存单元。然而,用这种字符常量初始化字符变量,或者给字符变量赋值的话,导致的结果是,字符变量只能得到字符常量的最后 8 位。也就是说,以下代码
 
              char ch = 'good';
 
ch 得到的是 'd' 的值。
 
以后,在没有特殊说明的情况下,我们讨论的都是 ASCII。
15. 基本数据类型:字符型(中)

不可打印字符(Nonprinting Characters)
 
 
    有些 ASCII 字符是不可打印的。例如退格、另起一行、警报等。C 语言提供了两种方法来表示这种不可打印字符。
 
    第一种方法是使用 ASCII 编码。例如,ASCII 编码中,7 用于表示警报:
 
        char beep = 7;
 
    第二种方法是使用特殊符号序列,也就是所谓的转义字符escape sequences)。参见下表:(
 
    转义字符          含义
          a           警报( Alert (ANSI C) )
          b            退格(Backspace)
          f            换页(Form feed)
          n            换行(Newline)
          r            回车(Carriage return)
          t            水平制表符(Horizontal tab)
          v            垂直制表符(Vertical tab)
          \            反斜杆( Backslash () )
          '            单引号( Single quote (') )
          "            双引号( Double quote (") )
          ?            问号( Question mark (?) )
          oo        八进制数( Octal value (o 代表一个八进制数字) )
          xhh        十六进制数( Hexadecimal value (h 代表一个十六进制数字) )
 
给变量赋值的时候,转义字符必须使用单引号引住。例如:
 
          char nl = 'n';
 
下面我们详细学习每个转移字符的含义。
 
    a(警报)是 ANSI C89 添加的,用于产生可听或者可视的警报。a 产生的效果取决于硬件。一般来说,输出 a 会产生鸣响。但是在某些系统,输出 a 不会产生任何效果,或者仅仅显示一个特殊字符。标准明确指出,a 不应该改变当前活跃位置(active position)。所谓活跃位置,是指显示设备(显示器、打字机、打印机等等)显示下一个字符的位置。以显示器为例,活跃位置就是指光标所处的位置,输出 a 不会导致光标移动位置。
 
b、f、n、r、t,以及 v 都是输出设备控制符。退格符(b)使当前行的活跃位置后退一个位置。换页符(f)使活跃位置跳到下一页的开端。注:换页符可用于控制打印机换页,但不会导致 PC 机的显示屏换页。换行符(n)使活跃位置跳到下一行的开端。回车符 ( r ) 使活跃位置返回当前行的开端。水平制表符(t)使活跃位置移动若干个位置(通常是8个)。垂直制表符(v)使活跃位置换若干行。注:v可用于控制打印机换若干行,但是不会导致PC机的显示屏换行。
 
    \、',以及 " 使我们可以把 ,' 和 " 用作字符常量。如果要打印以下句子:
 
" is called 'backslash'."
 
我们需要使用如下语句:
 
printf(""\ is called 'backslash'."");
 
    oo 和 xhh 是ASCII码的两种特殊表示形式。如果想用八进制ASCII码表示字符,可以在八进制数前面加上 ,然后用单引号引起来。例如:
 
            beep = '07';        /*  07 代表 a  */
 
打头的那些0可以省略,也就是说,写成 '7' 或者 '7' 都一样。无论有没有打头的0 ,7 都会被当成八进制数处理。
 
    从 C89 开始,C提供了用十六进制表示字符常量的方法:在反斜杆后面写一个 x ,然后再写 1 到 3 个十六进制数字。例如:
 
            nl = 'xa';        /*  xa 代表 n  */
 
    注意:使用ASCII码时,要注意区分数字4的ASCII码是52 ,'4' 代表字符 4 ,而不是数字4。此外,尽管 'n' 和 'xa' ,'a' 和 '07' 是等价的,但是我们应该尽可能使用 'n' 和 'a' ,而不要用 'xa' 和 '07' 。这是因为前者易懂、便于记忆,而且移植性更高。而后者只对使用ASCII码的系统有效。和数字字符。例如:字符
16. 基本数据类型:字符型(下)

一、字符输出
 
        printf 函数使用 %c 表示输出字符。因为字符是以 1 字节整数的形式存取的,所以,如果使用 %d 的话,输出的会是整数。例如:
 
/* 这个程序输出字符以及字符的整数编码 */
#include
 
int main(void)
{
      char ch;
 
      printf("Please enter a character.n");
      scanf("%c", &ch);   /* 由用户输入一个字符 */
      printf("The code for %c is %d.n", ch, ch);
 
      return 0;
}
 
请各位自行编译执行此程序,查看其执行结果。输入字符后记得要按回车键。
 
        printf 函数输出 ch 的值两次,第一次以字符的形式输出(因为格式限定符为 %c),第二次以十进制整数的形式输出(因为格式限定符是 %d)。注意:格式限定符只是用于指定数据的输出形式,而不是用来指定数据怎么存储。
 
二、字符类型的符号
 
        某些编译器中,char 默认是有符号的(signed)。对于这类型的编译器来说,char 的表示范围通常是 -128 到 127 。而另外一些编译器中,char 默认是无符号的(unsigned)。对于这类型的编译器来说,char 的表示范围通常是 0 到 255 。一般来说,编译器的使用说明会注明它默认把 char 当作有符号的还是无符号的。
 
        从 C89 开始,我们可以使用关键字 signed 和 unsigned 来修饰 char 。这么一来,无论编译器默认 char 是有符号的也好,无符号的也罢,我们都可以用 signed char 表示有符号 char ,也可以用 unsigned char 表示无符号 char 。

    
 
 

您可能感兴趣的文章:

  • 有了c语言基础,如何入手学习用c语言linux网络编程
  • 请问大侠学java要有c语言基础吗?
  •  只有一点JAVA语言基础,但是想先看看关于软件工程方面的东西.可能吗?
  • 请介绍一两本精典的JSP书籍,我要去买了,已有JAVA语言基础!
  • 自己在家学那么3个月到半年UNIX下的网络编程,有C语言基础,出去后能找到这方面的事吗?
  • C语言基础问题,参数定义在函数名后面,是为什么?
  • (基础)linux下c语言程序的编译问题
  • 看看您的c语言基础如何?链表问题
  • SQL语言查询基础:连接查询 联合查询 代码
  • C 语言基础教程(我的C之旅开始了)[五]
  • C 语言基础教程(我的C之旅开始了)[三]
  • C语言基础知识点解析(extern,static,typedef,const)
  • C语言嵌入informix基础入门示例讲解
  • C 语言基础教程(我的C之旅开始了)[二]
  • C 语言基础教程(我的C之旅开始了)[十]
  • C 语言基础教程(我的C之旅开始了)[四]
  • Oracle PL/SQL语言入门基础
  • C 语言基础教程(一)颜色加亮
  • C 语言基础教程(我的C之旅开始了)[九]
  • python基础教程之简单入门说明(变量和控制语言使用方法)
  • C 语言基础教程(我的C之旅开始了)[七]
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C语言中基础小问题详细介绍
  • Python语言的12个基础知识点小结


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3