2.2 常量与变量
程序所处理的数据不仅分为不同的数据类型,而且每种数据类型的数据还有常量和变量之分。
1. 常量和符号常量
在程序的运行过程中,其值始终保持不变,不能被修改的量称为常量。根据数据类型的不同可以划分成不同的常量,例如0、1234、−248为整型常量,'x'、'd'为字符常量, 1.23,−2.45为实型常量。这些常量一般从字面形式即可判断,所以通常称为直接常量或字面常量。
有时为了编程和阅读的方便,在程序设计中常用一个标识符代表一个常量,这种用一个标识符代表一个常量的符号称为符号常量,即以标识符形式出现的常量。
【例2.2】 符号常量的使用。
#include <iostream.h> #define PRICE 50 //注意:不是语句,末尾不加分号 int main() { int num, total; num = 10; total = num * PRICE; cout << "total = " << total << endl; return 0; }
程序运行结果为:
程序中用预处理命令#define 指定 PRICE 代表常量 50,所以在本程序中出现的所有PRICE都代表50,可以和常量一样进行运算。
注意:符号常量虽然有名字,但它不是变量,它的值在其作用域(本例中为主函数main)内是不能被改变的,也不能重新被赋值。例如,在程序中用赋值语句“PRICE = 20;”重新给PRICE赋值是错误的。
使用符号常量的好处:
(1)含义清楚。例如,【例2.2】中看到PRICE就知道它代表价格。因此在定义符号常量时,取名要尽量做到“见名知意”。
(2)在需要修改一个常量时能做到“一改全改”。例如,【例2.2】中若多处用到符号常量PRICE,我们只需要修改“#define PRICE 50”中的常数“50”,则在程序中所有以PRICE代表的价格会自动修改成新的值。
习惯上,符号常量名用大写字母表示,变量名用小写字母表示,以示区别。
2. 变量
在程序的运行过程中,其值可以发生变化的量称为变量。变量代表内存中具有特定属性的一个存储单元,它用来存放数据,即变量的值;而变量能存放何种类型的数据是由变量的数据类型决定的;为了区分不同的变量,以便被引用,需要用名字来标识变量,这就是变量名。所以对于任何一个变量,都应该包括名称、类型和值三个组成部分。
(1)变量命名规则
和其他高级语言一样,用来标识变量、符号常量、函数、数组、类型等实体名字的有效字符序列称为标识符(identifier),变量名作为标识符的一种必须遵循标识符的命名规则。
C++规定:标识符只能由字母、数字和下画线三种字符组成,并且第一个字符必须是字母或下画线。
下面列出的是合法的标识符,也是合法的变量名:
sum, month, BASIC, li_ming, _total, Student_name, day, tan
下面是不合法的标识符和变量名:
$123, M.D.John,3G55, Zhang-ming, U.S.A, #888, Li ming, C++
注意:在 C++中,大写字母和小写字母被认为是两个不同的字符。因此 AVERAGE和average是两个不同的变量名。
一般变量名用小写字母表示,与人们日常习惯一致,以增加可读性。另外,应注意变量名不能与 C++的关键字、系统函数名和类名相同。在国外的软件开发工作中,常习惯在变量名前面加上一个字母以表示该变量的类型,如用iCount表示这是一个整型变量, cName表示这是一个字符型变量。
C++没有规定标识符的长度(字符个数),但各个具体的C++编译系统都有自己的规定,因此,在编写程序时应了解所用系统对标识符长度的规定。
在选择标识符和变量名时,应注意做到“见名知意”,即选择有含义的英文单词(或其缩写)作为标识符,以增强程序的可读性。
(2)变量的数据类型
就像常量具有各种数据类型一样,变量也具有相应的数据类型。变量在使用之前需要首先声明其类型和名称,在同一语句中可以声明同一类型的多个变量。
变量声明语句的形式如下:
数据类型 变量名1,变量名2,…,变量名n;
【例2.3】 声明变量。
int num,total; //声明了sum与total两个int型变量 float x,y,z; //声明了x、y与z三个float型变量
(3)变量的存储类型
变量除了具有数据类型外,还具有存储类型,它控制哪些函数可以访问这个变量,还决定了变量在内存中存在的时间。
① auto存储类:一个函数中说明的变量其类型缺省为自动类的。自动变量采用堆栈方式分配内存空间,因此,当执行此区段时,系统会立即为这个变量分配内存空间,而函数执行完后,这个堆栈立即被系统收回。
② register存储类:存放在CPU的通用寄存器中,在寄存器中可以比在内存中更快地访问和操作变量。
③ extern存储类:在一个函数外部定义的变量。一个外部变量也必须在用到它的函数中说明后才能使用,说明方法可以用 extern 显式地说明,也可由上下文隐含地说明。一个外部变量在程序运行时都存在,而不是限制在某个函数中。
④ static 存储类:在内存中是以固定地址存放的,在整个程序运行期间都有效,但仅在定义它的程序开始执行时才初始化一次。