c语言char的用法.docx
- 文档编号:6094620
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:5
- 大小:18.59KB
c语言char的用法.docx
《c语言char的用法.docx》由会员分享,可在线阅读,更多相关《c语言char的用法.docx(5页珍藏版)》请在冰豆网上搜索。
c语言char的用法
c语言char的用法
C语言程序设计课程是高等院校计算机专业基础课程之一,其教学效果直接影响学生在计算机方面的应用。
下面来个大家介绍c语言char的用法。
C语言基本类型:
字符型(char)用法介绍
1.字符型(char)简介
字符型(char)用于储存字符(character),如英文字母或标点。
严格来说,char其实也是整数类型(integertype),因为char类型储存的实际上是整数,而不是字符。
计算机使用特定的整数编码来表示特定的字符。
美国普遍使用的编码是ASCII(AmericanStandardCodeforInformationInterchange美国信息交换标准编码)。
例如:
ASCII使用65来代表大写字母A,因此存储字母A实际上存储的是整数65。
注意:
许多IBM大型机使用另一种编码EBCDIC(ExtendedBinary-CodedDecimalInterchangeCode扩充的二进制编码的十进制交换码);不同国家的计算机使用的编码可能完全不同。
ASCII的范围是0到127,故而7位(bit)就足以表示全部ASCII。
char一般占用8位内存单元,表示ASCII绰绰有余。
许多系统都提供扩展ASCII(ExtendedASCII),并且所需空间仍然在8位以内。
注意,不同的系统提供的扩展ASCII的编码方式可能有所不同!
许多字符集超出了8位所能表示的范围(例如汉字字符集),使用这种字符集作为基本字符集的系统中,char可能是16位的,甚至可能是32位的。
总之,C保证char占用空间的大小足以储存系统所用的基本字符集的编码。
C语言定义一个字节(byte)的位数为char的位数,所以一个字节可能是16位,也可能是32位,而不仅仅限于8位。
2.声明字符型变量
字符型变量的声明方式和其它类型变量的声明方式一样:
chargood;
charbetter,best;
以上代码声明了三个字符型变量:
good、better,和best。
3.字符常量与初始化
我们可以使用以下语句来初始化字符型变量:
charch=A;
这个语句把ch的值初始化为A的编码值。
在这个语句中,A是字符常量。
C语言中,使用单引号把字符引起来就构成字符常量。
我们来看另外一个例子:
charfail;/*声明一个字符型变量*/
fail=F;/*正确*/
fail=F;/*错!
F是字符串字面量*/
把字符用双引号引起来构成字符串字面量,所以第三个语句是错误的。
我们会在后续的教程中讨论字符串,现在暂且把它放下。
因为字符实质上是以数字的形式存储的,所以我们可以直接使用数字来初始化字符变量,或者给字符变量赋值:
charch=65;/*不好的风格*/
在ASCII中,A的编码是65,所以对于使用ASCII的系统来说,这个语句等同于charch=A;。
使用非ASCII的系统中,65代表的不一定是A,而有可能是其它任何字符,所以使用数字来初始化字符变量,或者给字符变量赋值是一种不好的风格,因为移植性太差了!
但是,使用字符常量(例如A)来初始化字符变量,或者给字符变量赋值,字符变量得到的一定是我们所期待的字符的编码值。
例如:
charch=A;
无论在使用任何编码的系统中,ch都能够得到字符A所对应的编码值。
这是因为编译器会自动把A转化成A所对应的编码值。
因此,我们应该使用字符常量来初始化字符变量,或者给字符变量赋值;而不要用数字。
有趣的是,C使用int类型来处理字符常量,而不是char类型。
例如,在使用32位int的ASCII系统中,以下代码
charch=C;
C的编码值67被存储于32位的内存单元中;不过ch仍然存储于8位的内存单元中,只是它的值变成了67。
因此,我们可以定义形如good的古怪字符常量。
因为每个字符的编码值占用8位的内存单元,所以这个常量刚好可以存储于32位的内存单元。
然而,用这种字符常量初始化字符变量,或者给字符变量赋值的话,导致的结果是,字符变量只能得到字符常量的最后8位。
也就是说,以下代码
charch=good;
ch得到的是d的值。
以后,在没有特殊说明的情况下,我们讨论的都是ASCII。
ASCII值
控制字符ASCII值控制字符ASCII值控制字符ASCII值控制字符
0NUL32(space)64@96`
1SOH33!
65A97a
2STX3466B98b
3ETX35#67C99c
4EOT36$68D100d
5ENQ37%69E101e
6ACK3871G103g
8BS40(72H104h
9HT41)73I105i
10LF42*74J106j
11VT43+75K107k
12FF44,76L108l
13CR45-77M109m
14SO46.78N110n
15SI47/79O111o
16DLE48080P112p
17DC149181Q113q
18DC250282R114r
19DC351383S115s
20DC452484T116t
21NAK53585U117u
22SYN54686V118v
23ETB55787W119w
24CAN56888X120x
25EM57989Y121y
26SUB58:
90Z122z
27ESC59;91[123{
28FS6092\124|
29GS61=93]125}
30RS6294^126~
31US63?
95_127DEL
NUL空字符VT垂直制表SYN同步
SOH标题开始FF走纸控制ETB信息组传送结束
STX正文开始CR回车CAN作废
ETX正文结束SO移位输出EM媒介结束EndofMedium
EOT传输结束SI移位输入SUB换置
ENQ询问字符DLEDataLinkEscapeESCEscape
ACK确认DC1设备控制1FS文件分隔符
BEL响铃DC2设备控制2GS组分隔符
BS退格DC3设备控制3RS记录分隔符
HT横向制表DC4设备控制4US单元分隔符
LF换行NAK否定DEL删除
4.不可打印字符(NonprintingCharacters)
有些ASCII字符是不可打印的。
例如退格、另起一行、警报等。
C语言提供了两种方法来表示这种不可打印字符。
第一种方法是使用ASCII编码。
例如,ASCII编码中,7用于表示警报:
charbeep=7;
第二种方法是使用特殊符号序列,也就是所谓的转义字符escapesequences)。
参见下表:
(
转义字符含义
\a警报(Alert(ANSIC))
\b退格(Backspace)
\f换页(Formfeed)
换行(Newline)
回车(Carriagereturn)
\t水平制表符(Horizontaltab)
\v垂直制表符(Verticaltab)
\\反斜杆(Backslash(\))
\单引号(Singlequote())
\双引号(Doublequote())
\?
问号(Questionmark(?
))
\0oo八进制数(Octalvalue(o代表一个八进制数字))
\xhh十六进制数(Hexadecimalvalue(h代表一个十六进制数字))
给变量赋值的时候,转义字符必须使用单引号引住。
例如:
charnl=;
下面我们详细学习每个转移字符的含义。
\a(警报)是ANSIC89添加的,用于产生可听或者可视的警报。
\a产生的效果取决于硬件。
一般来说,输出\a会产生鸣响。
但是在某些系统,输出\a不会产生任何效果,或者仅仅显示一个特殊字符。
标准明确指出,\a不应该改变当前活跃位置(activeposition)。
所谓活跃位置,是指显示设备(显示器、打字机、打印机等等)显示下一个字符的位置。
以显示器为例,活跃位置就是指光标所处的位置,输出\a不会导致光标移动位置。
\b、\f、、、\t,以及\v都是输出设备控制符。
退格符(\b)使当前行的活跃位置后退一个位置。
换页符(\f)使活跃位置跳到下一页的开端。
注:
换页符可用于控制打印机换页,但不会导致PC机的显示屏换页。
换行符()使活跃位置跳到下一行的开端。
回车符()使活跃位置返回当前行的开端。
水平制表符(\t)使活跃位置移动若干个位置(通常是8个)。
垂直制表符(\v)使活跃位置换若干行。
注:
\v可用于控制打印机换若干行,但是不会导致PC机的显示屏换行。
\\、\,以及\使我们可以把\,和用作字符常量。
如果要打印以下句子:
\iscalledbackslash.
我们需要使用如下语句:
printf(\\\iscalled\backslash\.\);
\0oo和\xhh是ASCII码的两种特殊表示形式。
如果想用八进制ASCII码表示字符,可以在八进制数前面加上\,然后用单引号引起来。
例如:
beep=\007;/*\007代表\a*/
打头的那些0可以省略,也就是说,写成\07或者\7都一样。
无论有没有打头的0,7都会被当成八进制数处理。
从C89开始,C提供了用十六进制表示字符常量的方法:
在反斜杆后面写一个x,然后再写1到3个十六进制数字。
例如:
nl=\xa;/*\xa代表*/
注意:
使用ASCII码时,要注意区分数字4的ASCII码是52,4代表字符4,而不是数字4。
此外,尽管和\xa,\a和\007是等价的,但是我们应该尽可能使用和\a,而不要用\xa和\007。
这是因为前者易懂、便于记忆,而且移植性更高。
而后者只对使用ASCII码的系统有效。
和数字字符。
例如:
字符
5.字符输出
printf函数使用%c表示输出字符。
因为字符是以1字节整数的形式存取的,所以,如果使用%d的话,输出的会是整数。
例如:
/*这个程序输出字符以及字符的整数编码*/
#includestdio.h
intmain(void)
{
charch;
printf(Pleaseenteracharacter.);
scanf(%c,/*由用户输入一个字符*/
printf(Thecodefor%cis%d.,ch,ch);
return0;
}
请各位自行编译执行此程序,查看其执行结果。
输入字符后记得要按回车键。
printf函数输出ch的值两次,第一次以字符的形式输出(因为格式限定符为%c),第二次以十进制整数的形式输出(因为格式限定符是%d)。
注意:
格式限定符只是用于指定数据的输出形式,而不是用来指定数据怎么存储。
6.字符类型的符号
某些编译器中,char默认是有符号的(signed)。
对于这类型的编译器来说,char的表示范围通常是-128到127。
而另外一些编译器中,char默认是无符号的(unsigned)。
对于这类型的编译器来说,char的表示范围通常是0到255。
一般来说,编译器的使用说明会注明它默认把char当作有符号的还是无符号的。
从C89开始,我们可以使用关键字signed和unsigned来修饰char。
这么一来,无论编译器默认char是有符号的也好,无符号的也罢,我们都可以用signedchar表示有符号char,也可以用unsignedchar表示无符号char。
参考资料:
CPrimer5thEdition
C99标准
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 char 用法
![提示](https://static.bdocx.com/images/bang_tan.gif)