C语言程序设计教程
上QQ阅读APP看书,第一时间看更新

2.2 常量与变量

在程序运行过程中,其值不能被改变的量称为常量,其值可以改变的量称为变量。常量是指直接出现计算机指令中的数值,例如,x+8中的x是一个变量,需要通过变量名去寻找对应的内存空间中的值,而8就是常量,无需寻找其地址。

2.2.1 常量

常量可分为不同的类型,如整型常量0、-3;浮点型常量4.6、-1.23;字符常量'd',字符串常量"a"。常量从形式上又可分为字面(直接)常量和符号常量两种。从字面上就可以判别的常量叫字面常量。

在C语言中,常量可以用符号来代替,通过引用这个符号,就相当于引用这个常量。

【例2.1】 符号常量的使用。

/ *程序功能:计算圆的面积* /

#include <stdio.h>

#define PI 3.1415926

void main()

{

  float r,s;

  r = 5.0;

  s = PI * r * r;

  printf("Area is %f\n", s);

 }

在实际开发中,如果程序代码长、文件多时,为使用 3.1415926 这个常量方便,可以用某个标识符代表,这个标识符称为符号常量,即标识符形式的常量。用#define 命令行定义PI,即程序中的PI就是常量3.1415926。

习惯上,符号常量名用大写,变量名用小写,以示区别。

使用符号常量的优点如下。

(1)含义清楚。通过有意义的单词符号,可以指明该常量的意思,如上面的程序中,从PI就可知道它代表圆周率。因此定义符号常量名时,应考虑见名知意。

(2)在需要改变一个常量时能做到“一改全改”。需要修改常量时,只需要修改一次就可以实现批量修改。例如,在程序中多处用到圆周率,如果用常数表示,则在圆周率小数位数调整时,就需要在程序中做多处修改,若用符号常量 PI代表圆周率,则只需改动一处即可。例如:

#define PI 3.1416

表示在程序中所有以PI代表的数值就会一律自动改为3.1416。

(3)符号常量不同于变量,它的值在其作用域内不能改变,也不能再被赋值。如再用以下赋值语句给PI赋值是错误的。

PI = 3.14;

但是实际上,符号常量也有自己的缺点,如不能进行类型检查等。

2.2.2 变量

变量代表内存中代表特定属性的一个存储单元,它用来存放数据,也就是变量的值。在程序运行过程中,其值是可以改变的。一个变量应该有一个名字,以便被引用。每个变量必须具有以下两个要素。

变量名。每个变量都必须有一个名字——变量名,变量命名遵循标识符命名规则。最好在定义变量名时应考虑见名知意,如max表示求最大值,sum表示求和。

变量值。在程序运行过程中,变量值存储在内存中,不同类型的变量占用的内存单元(字节)数不同。在程序中,通过变量名来引用变量的值。

一个变量在内存中占据一定的存储单元,在该存储单元中存放变量的值,如图2.2所示。变量名实际上是一个符号地址,在对程序编译连接时由系统为每一个变量名分配一个内存地址。在程序中,从变量中取值,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。

图2.2 变量与变量名

在C语言中,有3类标识符:

(1)关键字。C语言规定了32个关键字(见附录C),如int、float等,这些关键字有特定的用途,不能用作变量名。

(2)系统预定义的标识符。系统提供的库函数的函数名,如printf,scanf等。系统允许它们用作变量名,但是这样会使它们失去原有作用,容易混淆。一般不把它们用作变量名。

(3)用户标识符。用户自定义的标识符,用来给程序中的变量、函数、符号常量、数组等命名。

变量的名字必须符合C语言标识符命名规则。C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。另外,C语言对大小写敏感,因此要注意变量名字母的大小写,如sum和SUM系统认为是两个不同的变量名。

下面是一些合法的标识符,可以作为变量名。

total,s_num,int_a,teacher1,age,sorce,_no,max_min

下面是一些不合法的标识符和变量名。

Jack.jones,¥350,$180,7days,x>y,#3.14,name?,年龄,char,int

注意:C语言规定,对所用到的变量要做强制定义,即“先定义,后使用”,这样做的原因如下。

(1)凡是未被事先定义的,系统不把它认作变量名,这样能保证程序中变量名使用得正确。比如程序中声明:

int week_num;

而在程序的执行部分错写成了week_nom,例如:

week_nom=6;

编译时系统会提示“Undefined symbol week_nom…”的信息,表示该变量未定义,不作为变量名,提醒用户检查错误,避免使用变量名出错。

(2)定义变量后,程序连接时由系统在内存中开辟(分配)存储空间。如定义整型变量x,程序连接时在内存中开辟四个字节(在Visual C++ 6.0环境下)的存储区,并将该存储区命名为x。

(3)指定每一个变量属于一个类型,这就便于在编译时据此检查,在程序中检查该变量进行的运算是否合法。例如:

float x;

int y;

y=5%x;

%是求余运算,要求运算符的两边都是整数。此处x为浮点型变量,不允许进行求余运算,否则在编译时会给出“出错信息”。