【C/C++】符号常量 常变量

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的变量不能被用来指定数组的维数。

使用的角度来看,常变量具有符号化常量的优点,而且使用更加方便。

猜你喜欢

转载自blog.csdn.net/shimadear/article/details/81170160