char类型用于存储字符(如,字母或标点符号),但是从技术层面看,char是整数类型 。因为char类型实际上存储的是整数而不是字符 。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符 。美国最常用的编码是ASCII编码,本书也使用此编码 。例如,在ASCII码中,整数65代表大写字母A 。因此,存储字母A实际上存储的是整数65 。标准ASCII码的范围是0~127,只需7位二进制数即可表示 。通常,char类型被定义为8位的存储单元,因此容纳标准ASCII码绰绰有余 。一般而言,C语言会保证char类型足够大,以存储系统(实现C语言的系统)的基本字符集 。许多字符集都超过了127,甚至多于255 。例如,日本汉字(kanji)字符集 。商用的统一码(Unicode)创建了一个能表示世界范围内多种字符集的系统,目前包含的字符已超过110000个 。国际标准化组织(ISO)和国际电工技术委员会(IEC)为字符集开发了ISO/IEC 10646标准 。统一码标准也与ISO/IEC 10646标准兼容 。
C语言把1字节定义为char类型占用的位(bit)数,因此无论是16位还是32位系统,都可以使用char类型 。
1.声明char类型变量char类型变量的声明方式与其他类型变量的声明方式相同 。下面是一些例子:
char responsechar itable
以上声明创建了3个char类型的变量:response、itable和latan 。
2.字符常量和初始化如果要把一个字符常量初始化为字母A,不必背下ASCII码,用计算机语言很容易做到 。通过以下初始化把字母A赋给grade即可:
char grade = 'A';
在C语言中,用单引号括起来的单个字符被称为字符常量(characterconstant) 。编译器一发现'A',就会将其转换成相应的代码值 。单引号必不可少 。下面还有一些其他的例子:
char broiled;/* declare a char variable*/broiled = 'T';/* OK*/broiled = T;/* NO! Thinks T is a variable*/broiled = "T";/* NO! Thinks "T" is a string*/
如上所示,如果省略单引号,编译器认为T是一个变量名;如果把T用双引号括起来,编译器则认为"T"是一个字符串 。字符串的内容将在第4章中介绍 。
实际上,字符是以数值形式存储的,所以也可使用数字代码值来赋值:
在本例中,虽然65是int类型,但是它在char类型能表示的范围内,所以将其赋值给grade没问题 。由于65是字母A对应的ASCII码,因此本例是把A赋给grade 。注意,能这样做的前提是系统使用ASCII码 。其实,用'A'代替65才是较为妥当的做法,这样在任何系统中都不会出问题 。因此,最好使用字符常量,而不是数字代码值 。奇怪的是,C语言将字符常量视为int类型而非char类型 。例如,在int为32位、char为8位的ASCII系统中,有下面的代码:
char grade = 'B';
本来'B'对应的数值66存储在32位的存储单元中,现在却可以存储在8位的存储单元中(grade) 。利用字符常量的这种特性,可以定义一个字符常量'FATE',即把4个独立的8位ASCII码存储在一个32位存储单元中 。如果把这样的字符常量赋给char类型变量grade,只有最后8位有效 。因此,grade的值是'E' 。
3.非打印字符单引号只适用于字符、数字和标点符号,浏览ASCII表会发现,有些ASCII字符打印不出来 。例如,一些代表行为的字符(如,退格、换行、终端响铃或蜂鸣) 。C语言提供了3种方法表示这些字符 。
第1种方法前面介绍过—使用ASCII码 。例如,蜂鸣字符的ASCII值是7,因此可以这样写:
char beep = 7
第2种方法是,使用特殊的符号序列表示一些特殊的字符 。这些符号序列叫作转义序列(escape sequence) 。表3.2列出了转义序列及其含义 。把转义序列赋给字符变量时,必须用单引号把转义序列括起来 。例如,假设有下面一行代码:
char nerf = 'n'
稍后打印变量nerf的效果是,在打印机或屏幕上另起一行 。
文章插图
Table 3.2 Escape Sequences
现在,我们来仔细分析一下转义序列 。使用C90新增的警报字符(a)是否能产生听到或看到的警报,取决于计算机的硬件,蜂鸣是最常见的警报(在一些系统中,警报字符不起作用) 。C标准规定警报字符不得改变活跃位置 。标准中的活跃位置(active-position)指的是显示设备(屏幕、电传打字机、打印机等)中下一个字符将出现的位置 。简而言之,平时常说的屏幕光标位置就是活跃位置 。在程序中把警报字符输出在屏幕上的效果是,发出一声蜂鸣,但不会移动屏幕光标 。接下来的转义字符b、f、n、r、t和v是常用的输出设备控制字符 。了解它们最好的方式是查看它们对活跃位置的影响 。换页符(f)把活跃位置移至下一页的开始处;换行符(n)把活跃位置移至下一行的开始处;回车符(r)把活跃位置移动到当前行的开始处;水平制表符(t)将活跃位置移至下一个水平制表点(通常是第1个、第9个、第17个、第25个等字符位置);垂直制表符(v)把活跃位置移至下一个垂直制表点 。这些转义序列字符不一定在所有的显示设备上都起作用 。例如,换页符和垂直制表符在PC屏幕上会生成奇怪的符号,光标并不会移动 。只有将其输出到打印机上时才会产生前面描述的效果 。
推荐阅读
- 火星的5大秘密 从火星上看地球好恐怖
- 水星两极地区有一些陨石坑,研究发现这些坑内 火星的地形兼具充满陨石坑
- 阿根廷发现的恐龙 世界上最小的食草恐龙是什么龙
- 浮来青茶是什么茶,乌龙茶特有的加工工艺是什么
- 基于零信任的安全架构
- 顾龙李仁名茶历史悠久,唐代茶圣陆羽眼中的茶中第顾渚紫笋
- 佛教僧侣茶俗的繁荣,四川民俗中的茶俗谚语介绍
- 蜂蜜红枣茶的禁忌,蜂蜜红枣茶
- 柑普茶的功效与作用,小青柑和大柑普的区分
- 佛教与茶参禅悟道,茶和中国的佛教思想有什么关系