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

2.2 常量

常量是一种标识符,它的值在运行期间恒定不变。C++语言用#define来定义常量(称为宏常量)。C++语言除了#define外还可以用const来定义常量(称为const常量)。

2.2.1 什么是常量

在程序运行过程中,其值不能被改变的量称为常量。常量区分为不同类型,如12、0、-3为整型常量,4.6、-1.23为实型常量,'a'、'd'为字符常量。常量一般从字面形式即可判别,这种常量称为字面常量或直接常量。

也可以用一个标识符代表一个常量,如实例2.6所示。

【实例2.6】 符号常量的使用(源代码\Chapter 2/2_6)。

#include<iostream.h>

#include<stdlib.h>

#define PRICE 30  //定义符号常量

int main()

{

int num, total;

num=10;

total=num*PRICE;  //使用符号常量

cout<<total<<endl;

return 0;  //返回值

}

【输出结果】实例2.6的输出结果如下。

300

【代码剖析】

程序中用#define命令行定义PRICE代表常量30,此后凡是在此程序中出现的PRICE都代表30,可以和常量一样进行运算。

这种用一个标识符代表一个常量的符号,称为符号常量,即以标识符形式出现的常量。

注意 符号常量与变量不同,符号常量的值在其作用域内不能改变,也不能再被赋值。如果再用赋值语句给符号常量赋值是错误的。

2.2.2 数值常量—整型常量和实型常量

整型常量和实型常量均属于数值型常量,它们在程序中用来表示一个固定大小的数值。

1. 整型常量

C++语言整型常量的书写形式有3种:

□十进制整数。通常整数的写法,如0、123、-45、+25。

□八进制整数。以数字0开头并由数字0~7组成的数字序列,为八进制整数。如0123表示八进制整数,其值等于十进制整数l*8*8+2*8+3=83。

□十六进制整数。十六进制整数是以0X(或0x)开头的整数。表示十六进制数的数字有16个,它们分别是0~9和A、B、C、D、E、F,其中6个英文字母也可以小写。例如,0x123表示十六进制整数,其值等于十进制整数1*16*16+2*16+3=291;0xABC,其值等于10*16*16+11*16+12=2748。

整型常量也可在整数之后接上字母L(或l),特别指明它是long型的。

整型常量也可在整数之后接上字母U(或u),特别指明是不带符号的,即是unsigned型的。为指明不带符号的long型整型常量,则需在整数之后同时加上字母U和L,表明该整型常量是unsigned long型的。

整型数据以二进制形式存放,要求短整型数据的字节数不能大于整型数据的字节数;整型数据的字节数不能大于长整型数据的字节数。对于带符号的整数,用二进制代码的最左二进位作为数的符号,1表示负数,0表示正数。

2. 实型常量

C语言实型常量的一般书写格式是:

正负号整数部分.小数部分指数部分

其中,正负号可有可无,无正负号即为正实数;整数部分和小数部分都是十进制数字序列;指数部分是e(或E)后接上正负号(正号可有可无)和十进制数字序列。

按上述格式书写实型常量,另有两条限制:

□整数部分和小数部分可以任选,但不可同时都没有。

□小数点和指数部分不可以同时都没有。

ANSI C引入了两个后缀字符,用f标识float型实型常量,用1(或L)标识long double型实型常量,而无后缀符的实型常量被认为是double型的实型常量。

说明 要注意实型常量的有效位数,不要以为写上的数字都能被计算机所接受。在大多数C++系统中,一个float型实型数据在内存中占用4个字节(32个二进位),约7个十进位有效数字,能表示绝对值最接近0的实数约为10的-38次方,最大的实数约为10的38次方。例如,对于代码“float x=123456.123f”,在大多数系统中,实型常量123456.123f的最后两位数字是无效的。

double型实型数据占用8个字节(64个二进位),约15个十进位有效数字,能表示绝对值最接近0的实数约为10的-308次方,最大的实数约为10的308次方。

2.2.3 字符型常量

C++语言中的字符常量是用单撇号括起来的一个字符,如'a'、'x'、'D'、'?'、'$'等都是字符常量。

注意'a'与'A'是不同的字符常量,常量是区分大小写的。

除了以上形式的字符常量外,C++还允许用一种特殊形式的字符常量,就是以一个字符“\”开头的字符序列。例如,“\n”代表一个“换行”符。这是一种“控制字符”,在屏幕上是不能显示的,在程序中也无法用一个一般形式的字符表示,只能采用特殊形式来表示。

常用的以“\”开头的特殊字符见表2.5。

2.2.4 字符串常量

字符串常量用来表示一个字符序列,它的书写方法是用双引号引住字符序列。例如:"ABC"、"12*2"等。字符串常量""是一个空字符串,即不含任何有效字符的字符串。字符串数据顺序存储字符串字符的ASCII代码,并在最后一个字符后存储一个十六进制代码全为0的特殊字符,用来标记字符串的结束。所以字符串常量"1234"在内存中实际占5个字节,而空字符串只占一个字节。字符串中的字符也可以是转义字符。

注意 不要将字符常量与字符串常量混淆。'a'是字符常量,"a"是字符串常量,二者是不相同的。假设c被指定为字符变量,下面的代码是正确的:

char c;

c='a';

而下面的代码将导致编译错误:

char c;

c="a";

错误的原因是不能把一个字符串常量赋值给一个字符变量。

有人不能理解:'a'和"a"究竟有什么区别?C++规定:在每一个字符串常量的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。C++规定以字符'\0'作为字符串结束标志。'\0'是一个ASCII码为0的字符,从ASCII代码表中可以看到ASCII码为0的字符是“空操作字符”,即它不引起任何控制动作,也不是一个可显示字符。 hNQzwObvHkcIBxoJc/dNpWZjSdGSYu80KsHFTAAn+/NDPY2Lr4HVG/epjWHNFxYJ

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