当前位置:嗨网首页>书籍在线阅读

82-char常量

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

B.9.2  char 常量

C把 char 常量视为 int 类型,而 C++ 将其视为 char 类型。例如,考虑下面的语句:

char ch = 'A';

在C中,常量 'A' 被存储在 int 大小的内存块中,更精确地说,字符编码被存储为一个 int 类型的值。相同的数值也存储在变量 ch 中,但是在 ch 中该值只占内存的 1 字节。

在C++中, 'A'ch 都占用1字节。它们的区别不会影响本书中的示例。但是,有些C程序利用 char 常量被视为 int 类型这一特性,用字符来表示整数值。例如,如果一个系统中的 int 是4字节,就可以这样编写C代码:

int x = 'ABCD'; /*对于int是4字节的系统,该语句出现在C程序中没问题,但是出现在C++程序中会出错 */

'ABCD' 表示一个4字节的 int 类型值,其中第1个字节存储 A 的字符编码,第2个字节存储 B 的字符编码,以此类推。注意, 'ABCD'"ABCD" 不同。前者只是书写 int 类型值的一种方式,而后者是一个字符串,它对应一个5字节内存块的地址。

考虑下面的代码:

int x = 'ABCD';
char c = 'ABCD';
printf("%d %d %c %c\n", x, 'ABCD', c, 'ABCD');

在我们的系统中,得到的输出如下:

1094861636 1094861636 D D

该例说明,如果把 'ABCD' 视为 int 类型,它是一个4字节的整数值。但是,如果将其视为 char 类型,程序只使用最后一个字节。在我们的系统中,尝试用 %s 转换说明打印 'ABCD' 会导致程序奔溃,因为 'ABCD' 的数值( 1094861636 )已超出该类型可表示的范围。

可以这样使用的原因是C提供了一种方法可单独设置 int 类型中的每个字节,因为每个字符都对应一个字节。但是,由于要依赖特定的字符编码,所以更好的方法是使用十六进制的整型常量,因为每两位十六进制数对应一个字节。第15章详细介绍过相关内容( C 的早期版本不提供十六进制记法,这也许是多字符常量技术首先得到发展的原因)。