常量与变量

1 常量和符号常量

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

也可以用一个标识符代表一个常量,如:

例3.1 符号常量的使用。

# define PRICE 30

Main

{

int num, total;

num=10;

total=num*PRICE:

printf("total=%d\n",total);

}

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

total=300

这种用一个标识符代表一个常量的,称为符号常量,即标识符形式的常量。请注意符号常量不同于变量,它的值在其作用域(在本例中为主函数)内不能改变,也不能再被赋值。如再用以下赋值语句给PRICE赋值是错误的。

PRICE=40;

习惯上,符号常量名用大写,变量名用小写,以示区别。使用符号常量的好处是:

(1)含义清楚。如上面的程序中,看程序时从PRICE就可知道它代表价格。因此定义符号常量名时应考虑“见名知意”。在一个规范的程序中不提倡使用很多的常数,如: sum= 15 * 30 *23.5*43。在检查程序时搞不清各个常数究竟代表什么。应尽量使用“见名知意”的变量名和符号常量。

(2)在需要改变一个常量时能做到“一改全改”。例如在程序中多处用到某物品的价格,如果价格用常数表示,则在价格调整时,就需要在程序中作多处修改,若用符号常量 PRICE 代表价格,只需改动一处即可。如:

# define PRICE 35

在程序中所有以PRICE代表的价格就会一律自动改为35。

2变量

其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。在该存储单元中存放变量的值。请注意区分变量名和变量值这两个不同的概念,见图3.1。变量

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

和其他高级语言一样,用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符(identifier)。简单地说,标识符就是一个名字。

C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。下面列出的是合法的标识符,也是合法的变量名:

sum,average,-total.Class.day,month.Student -name,tan,lomus -1-2-3,BASIC,li_ling

下面是不合法的标识符和变量名:

M.D.John,¥123,#33,3D64,a>b

注意,大写字母和小写字母被认为是两个不同的字符。因此,sum 和SUM,Class 和 class 是两个不同的变量名。一般,变量名用小写字母表示,与人们日常习惯一致,以增加可读性。

ANSIC标准没有规定标识符的长度(字符个数),但各个C编译系统都有自己的规定。有的系统(如IBM PC的MSC)取8个字符,假如程序中出现的变量名长度大于8个字符,则只有前面8个字符有效,后面的不被识别。例如,有两个变量:student_name和 student_number,由于二者的前8个字符相同,系统认为这两个变量是一回事而不加区别。可以将它们改为stud.name 和stud_num,以使之区别。TurboC则允许32个字符。因此,在写程序时应了解所用系统对标识符长度的规定,以免出现上面的混淆。这种错误并不反映在编译过程中(即语法无错误),但运行结果显然不对。为了程序的可移植性(即在甲机器上运行的程序可以基本上不加修改,就能移到乙机器上运行)以及阅读程序的方便,建议变量名的长度不要超过8个字符。

如前所述,在选择变量名和其他标识符时,应注意做到“见名知意”,即选有含意的英文单词(或其缩写)作标识符,如count、name、day,month,total,country等,除了数值计算程序外,一般不要用代数符号(如a、b、c、x1、yl 等)作变量名,以增加程序的可读性。这是结构化程序的一个特征。本书在一些简单的举例中,为方便起见,仍用单字符的变量名(如a、b、c等),请读者注意不要在其他所有程序中都如此。

在C语言中,要求对所有用到的变量作强制定义,也就是“先定义,后使用”,如例

1.2、例1.3那样。这样做的目的是:

(1)凡未被事先定义的,不作为变量名,这就能保证程序中变量名使用得正确。例如,如果在定义部分写了

int student;

而在执行语句中错写成statent。如:

statent=30;

在编译时检查出statent未经定义,不作为变量名。因此输出“符号statent未经定义”的信息,便于用户发现错误,避免变量名使用时出错。

  1. 每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。如指定a、b 为int型,TurboC编译系统为a和b各分配两个字节,并按整数方式存储数据。(3)指定每一变量属于一个类型,这就便于在编译时,据此检查该变量所进行的运算是否合法。例如,整型变量a和b,可以进行求余运算:

a%b

%是“求余”,得到a除以b的余数。如果将a、b指定为实型变量,则不允许进行“求余”运算,在编译时会给出有关“出错信息”。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光向日葵之沈阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值