C核心技术手册(二十二)

3.3     字符常量

  字符常量由一个单引号中包含一个或多个字符组成。一些例子如下:

‘a’   ‘XY’  ‘0’    ‘*’

所有源字符集中的字符均可用于字符常量中,除去单引号(‘),反斜杠(/),及换行符,可以使用转义字符来表示这些字符:

  ‘/’’        ‘//’   ‘/n’

在字符常量中所有需要转义的字符将在转义字符一节描述。

3.3.1    字符常量的类型

  字符常量具有int类型,除非它们被明确地使用前缀L定义为宽字符(wchart_t),如果一个字符常量仅含有占有一个字节的字符,它的值将是执行时字符集中的字符码。例如,常量aASCII编码中的十进制值为97,含有多个字符的字符常量其值因编译器的不同而各异。

下面的代码段测试输入的值是否在15之间(包括15):

    #include <stdio.h>
    int c = 0;
    /* ... */
    c = getchar( );                          // Read a character.
    if ( c != EOF && c > '0' && c < '6' )   // Compare input to character
                                            // constants.
    {
      /* This block is executed if the user entered a digit from 1 to 5. */
}
如果char类型是有符号的,那么字符常量的值也可能为负数,因为常量的值是charint类型转换的结果。例如,ISO 8859-1,或称ANSI字符集,通常使用8-bit字符集,在它中,英磅的表示字符£,其十六进制值为A3:
    int c = '/xA3';                         // Symbol for pounds sterling
    printf("Character: %c     Code: %d/n", c, c);
如果执行时字符集为ISO 8859-1,且类型char是有符号的,那么上面例子中的printf语句将产生如下输出:
   Character: £     Code: -93
在一个不使用单字节字符的程序中,你可以使用宽字符常量,宽字符常量具有类型wchar_t,使用前缀L,如下面这些例子:
   L'a'   L'12'   L'/012'   L'/u03B2'
包含单个多字节字符的宽字符常量的值为标准函数mbtowc()的返回值。
3.3.2    转义字符

  转义字符以反斜杠/开始,表示一个单字符,转义字符允许你表示任意字符常量和字符串常量,包括不可打印字符和具有特殊意义的字符,例如”, Table 3-3列出了C中公认的转义字符。

 

 

 

 

Table 3-3. Escape sequences

转义字符

字符值

输出设备上的动作

/’

单引号(’)

可打印字符

/’’

双引号(”)

 

/?

问号(?)

 

//

反斜杠(/)

 

/a

警报

产生一个听得见或可见的信号

/b

退格

从当前位置向前移动一个字符

/f

换页

从当前位置移动到下一个新页的开始

/n

换行

从当前位置移动到下一个新行的开始

/r

回车

从当前位置移动到当前行的开始

/t

水平TAB

从当前位置移动一个水平tab

/v

垂直TAB

从当前位置移动一个垂直tab

/o,/oo, /ooo

八进制字符

可打印字符

/xh[h…]

十六进制字符

 

/uhhhh

/Uhhhhhhhh

通用字符名

 

 

如表Table 3.3所示,通用字符名也可使用转义字符,通用字符允许指定扩展字符集中任意的字符,而不管使用的是何种编码方式。

你可使用八进制或十六进制转义字符来表示在类型unsigned char的取值范围内的任意字符码,或者在类型wchar_t取值范围内的任意宽字符码。如Table 3-4.

Table 3-4. Examples of octal and hexadecimal escape sequences

八进制

十六进制

描述

‘/0’

‘/x0’

null

‘/033’  ‘/33’

‘/x1B’

ESC

‘/376’

‘/xfe’

254

‘/417’

‘/x10f’

非法,其值超过unsigned char 的取值范围

L’/417’

L’/x10f’

宽字符常量,类型为wchar_t

-

L’/xF82’

宽字符常量

表中没有最后一个常量L’/xF82’对应的八进制表示,因为八进制转义字符不能容纳三个八进制数字,同样,宽字符常量L’/3702’包含两个字符,分别为L’370’L’2’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值