购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 常量

在程序执行过程中,其值不发生改变的量称为常量,常量与数据类型结合又可分为整型常量、浮点常量、字符常量和枚举常量。在程序中,常量可以不经说明直接引用。

例如,有如下语句:

该语句为赋值语句,表示将整型常量 10 赋给变量I,其中数字 10 即为整型常量,属于正确引用,但由于变量i未经定义就进行引用,程序编译将会出现错误。

2.3.1 整型常量

常用的整型常量有八进制、十进制和十六进制三种。

1. 八进制常量

八进制常量必须以数字 0 开头,数码取值为 0~7。八进制数通常是无符号数,以下均是合法的八进制数 022,0110,0177777 等。以下均是不合法的八进制数 123(无前缀 0),0492(含有非八进制数码),-0127(出现了负号)等,

2. 十六进制常量

十六进制常量必须以 0X或 0x开头,其数码取值为 0~9,A~F或a~f。以下均是合法的十六进制数 0XB5,0X10,0XFFFF等。以下均是不合法的十六进制数B6(无前缀 0X),0X3G(含有非十六进制数码)等。

3. 十进制常量

十进制常量没有前缀,其数码为 0~9。以下均是合法的十进制数 23,-70,65535,1024等。以下均是不合法的十进制数 023(不能有前缀 0),23D(含有非十进制数码)等。

不同进制的数可以以同一种格式输出,也可以以不同格式输出,范例 2.1 说明了不同进制常量的数值表示。

范例 2.13
OutputInteger.c

OutputInteger.c:整型常量中八进制、十进制和十六进制的输出格式分别为%o, %d和%x,使用不同的格式,输出结果就是对应的表示形式,输出整数 521, 0521 和 0x521 的几种表示方法。

(光盘\chat2\ OutputInteger.c)

上述代码第 4、第 5 和第 6 行分别按八进制、十进制和十六进制输出三个不同的整型常量 521,0521 和 0x521,输出结果为:

作者心得:

C语言中,整型常量可用后缀加字母“l”或“L”表示长整型,如 034L表示长整型八进制数 034。32 位机中,长整型和普通整型没有区别。

2.3.2 实型常量

实型也称为浮点型。C语言中,实型常量也称为实数或者浮点数,并且实型常量只采用十进制表示形式。实型常量的表达方式有两种小数形式与指数形式。

1. 小数形式

实数的小数形式由数字 0~9 以及小数点组成。其中,小数点前仅有零位时,数字 0 可省略,小数点后仅有 0 位时,数字 0 也可以省略。例如:0.391、 14.0、.556、-33.等均为合法的实数。

2. 指数形式

实数的指数形式由十进制数码、阶码标志e或E以及阶码组成,其中阶码包括阶符和阶数两部分,阶符可为+或-,其中+可省略,阶数只能是十进制正整数或零,阶码不能省略。指数形式的一般表达方式为a E n,其中,a为十进制数,n为阶码,如+5、-6 及+9 等均为阶码。

如实数 314159.26 可表示为 3.1415926E+5、3.1415926e5 或 314.15926E+3 等。其中,把3.1415926E+5 这种形式称为“规范化的指数形式”,即十进制数码绝对值为大于 1 小于 10的数。

实型常量可通过加后缀f或F表示,如 58f和 785F分别表示实型常量 58 和 785,其内存所占空间与整型常量 58 和 785 有所不同。

2.3.3 字符常量

字符常量是C语言程序中应用非常广泛的一类常量,通常它是用单引号引起来的一个字符,字符常量在内存中占一个字节的内存空间。

1. 普通字符

例如'm','n','@','+','?'都是合法字符常量。在C语言中,字符常量有以下特点。

(1) 字符常量只能用单引号引起来,不能用双引号或其他括号。

(2) 字符常量只能是单个字符,不能是字符串。

(3) 字符可以是字符集中任意字符,但数字被定义为字符型之后就不能以原数值参与数值运算。如'0'和 0 是不同的,'0'是字符常量,但它仍能参与运算,不同的是需要将其转化为对应的ASCII码值 48。

例如下面的代码:

程序输出:

说明以整型格式输出时字符'0'将以其ASCII码值 48 输出。

2. ASCII码

ASCII 码(American Standard Code for Information Interchange)美国国家信息交换标准码。ASCII码使用一个字节表示不同的字符,最多可以定义 256 个字符,目前已定义 128 个,其中包括字母、数字、标点符号、控制字符及其他特殊符号的数值。它是国际标准化组织ISO(International Organization for Standardization)批准的国际标准码。

ASCII 字符集共有 128 个字符,其中 96 个可打印字符,包括常用的字母、数字、标点符号等,其他 32 个为控制字符。ASCII 字符集及其编码见附表 1。

C语言中常用的ASCII码是字母和数字集合,如A的ASCII值为 65,a的ASCII值为 97。

3. 转义字符

转义字符是一种特殊的字符常量。转义字符以反斜杠“\”开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在hello程序中printf函数中用到的“\n”就是一个表示换行的转义字符。常用的转义字符及其含义参见表 2-3 所示。

表 2-3 转义字符表

转义字符中最常用的是换行符“\n”,在很多输出语句中将使用它进行打印换行。

2.3.4 字符串常量

C语言中,字符串常量是由一对双引号引起来的字符序列,每个字符串都以'\0'作为结束标志。字符串常量在内存中存储时,系统在字符串的末尾自动添加字符串结束符'\0'。因此,在C语言程序中,n个字符的字符串常量,在内存中占有n+1 个字节的存储空间。

例如,字符串“Hello”包含 5 个字符,而在内存中占 6 个字符,系统在字符串结尾会添加结束符“\0”。需要特别注意的是,对于单个字符和字符串的区别,范例 2.14 说明了这种区别。

范例 2.14
Charstringdifferent.c

Charstringdifferent.c这里通过sizeof运算符解释单个字符时字符常量和字符串常量在内存中所占字节数的差别。

(光盘\chat2\Charstringdifferent.c)

sizeof是C语言中用于获取对象内存字节数的特殊运算符,这里分别获取了字符“a”和字符串“a”在内存中所占字节数。程序第 4 行和第 5 行分别通过sizeof运算符获取字符“a”和字符串“a”的内存字节数,在获取字符所占内存空间时使用了强制类型转换,原因请查看疑难解决 2。程序运行输出结果:

字符'a'和字符串"a"在内存中的逻辑存储如图 2-2 所示。

图 2-2 字符'a'和字符串"a"

作者心得:

范例 2.14 代码中printf函数内的说明字符串"char 数据类型长度: "和"string 数据类型长度:"使用了中文作为说明字符串。在Visual C++6.0 编程环境中,避免使用中文字符串,应尽量使用英文和拼音来表达。本书为便于读者理解,均使用了中文,读者在实际编写程序时应尽量避免这类情况。 9HqzteKxv6AudyvmRCAp3dUUgif72uVdlabmJt6WbrB2GihzNLT1VYqMiI09QI+l

点击中间区域
呼出菜单
上一章
目录
下一章
×