C

C 知识量:16 - 74 - 317

3.4 char类型><

char类型- 3.4.1 -

char类型用于储存字符,比如:字母“a”或标点符号“,”等。但是从技术层面上来说,char是整数类型,因为char类型实际储存的并不是字符,而是用于表达字符的数字编码。例如:在ASCII码中,65代表大写字母A,所以用char类型储存A,实际上储存的是整数65。

C语言把1字节定义为char类型占用的位数,无论是16位还是32位系统,char类型没有区别。

声明char类型变量- 3.4.2 -

以下是声明char类型的方式:

 char word;
 char A,B;

以上代码声明了char类型的变量word、A和B,声明方法与整数没有什么区别。

字符常量和初始化- 3.4.3 -

要初始化一个字符常量,只需像下面这样:

char letter = 'A';

在C语言中,用单引号括起来的单个字符被称为字符常量。编译器会自动将字符常量转换成相应的代码值。注意:单引号必不可少,而且不能用双引号,双引号定义的是字符串。

因为char类型储存的实际是整数值,因此也可以使用数字代码值来赋值,例如:

char letter = 65;

这样赋值没有错误,但是可读性太差了,最好不要使用这种赋值方法。

非打印字符- 3.4.4 -

在ASCII码中,有些字符是打印不出来的,例如:退格、换行等。如果要表示此类字符,可以使用特殊的符号序列,即转义序列。

转义序列含义
\a警报
\b退格
\f换页
\n换行
\r回车
\t水平制表符
\v垂直制表符
\\反斜杠(\)
\'单引号
\"双引号
\?问号
\0oo八进制值
\xhh十六进制值
  • \a 表示警报,但如何实现取决于硬件情况,通常计算机会发出蜂鸣声,但不会移动屏幕光标。

  • \b 会把光标后退一位,相当于键盘上的backspace键。

  • \f 会把光标移动到下一页的开始处。

  • \n 会把光标移动到下一行的开始处。

  • \r 会把光标移动到当前行的开始处。

  • \t 会将光标移动到下一个水平制表点,通常是第1个、第9个、第17个、第25个等字符位置。

  • \v 会把光标移动到下一个垂直制表点。

  • \\ 会打印反斜杠“\”。

  • \' 会打印单引号“'”。

  • \" 会打印双引号“"”。

  • \? 会打印问号“?”。

  • \0oo和\xhh是ASCII码的特殊表示,即ASCII码的八进制表示和十六进制表示。例如:报警字符(\a)可以表示为八进制:'\007',Ctrl+P可以表示为十六进制:'\x10'。

需要注意的是:一些转义序列不一定在所有显示设备上都起作用,例如,换页符和垂直制表符可能会在屏幕上打印奇怪的符号,只有将其输出到打印机上时,才会有预期的效果。

打印char类型- 3.4.5 -

如果要打印char类型数据,printf()函数应当使用%c转换说明来指明待打印的字符。

#include <stdio.h>

int main(void) {
    char letter = 'A';
    printf("The letter is:%c\n", letter);
    printf("As a number,it is:%d", letter);
    return 0;
}

以上代码的运行结果为:

The letter is:A
As a number,it is:65

从以上代码可以看出,使用%c转换说明打印的是字符类型,而使用%d转换说明打印就将是整数类型。这也显示出char类型数据在系统内部本质上是按照整数储存的。

char类型与符号- 3.4.6 -

在C语言的实现中,有些编译器把char实现为有符号类型,因此,char可以表示的范围是-128~127。还有一些编译器把char实现为无符号类型,因此,char可以表示的范围就是0~255。

根据C90标准,C语言允许在关键字char前面使用signed或unsigned,所以,无论编译器默认char是否有符号,signed char都表示有符号类型,而unsigned char表示无符号类型。如果只使用char处理字符,char前面不需要标注任一种符号。