1.常量
在程序运行过程中,其值不能被改变的量叫做常量。
常用的常量有如下几类:
整型常量
实型常量
字符常量
普通字符
转义字符 如:\\表示一个反斜线;\n表示换行,将当前位置移到下一行的开头;\r表示回车,将当前位置移到本行的开头。
字符串常量
符号常量
符号常量不占内存,只是一个临时符号,预编译结束后这个符号就不存在了。用标识符代表一个常量,使用之前必须定义。例如宏定义和枚举元素。
宏定义用#define指令,指定用符号名称代表一个常量。
例如:#define NUM 100 //NUM为符号常量,100为整型常量
枚举提供了一种替代的方法,它不但定义了整数常量,而且还把它们组成一个集合。
例如:enum Weekday{SUN, MON, TUES, WED, THU, FRI, SAT}; //SUN,MON等均为符号常量。第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1
2.常变量
常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。常变量在定义时必须显式初始化。如:const int a=3;
int& r=5; //编译错误
这条语句出现编译错误,原因是文字常量不可寻址,因而无法为文字常量建立引用。
下面这条语句又是合法的:
const int& r=5;
原因是编译器将一个文字常量转化成常变量的过程。在数据区开辟一个值为5的无名整型常变量,然后将引用r与这个整型常变量进行绑定。
3.符号常量和常变量比较
定义符号常量:#define PI 3.1415926 //注意后面没有分号
定义常变量 :const float PI=3.1415926;
符号常量 pi 和常变量 PI 都代表3.1415926,在程序中都能使用,只是二者的性质有所差别,定义符号常量使用#define 指令,是预编译指令,只是使用一个符号常量代表一个字符串,在预编译是仅仅进行字符替换,在预编译之后符号常量不存在了(全部换成了3.1415926),对符号常量的名字是不分配内存的。常变量要占据内存空间,有变量值,只是这个值不改变。
符号常量和常变量都能用来定义数组维数,数组大小必须能在编译期确定。这意味着非const的变量不能被用来指定数组的维数。
使用的角度来看,常变量具有符号化常量的优点,而且使用更加方便。