C语言的数据类型→常量与变量
一、常量:在程序运行过程中,其值不能被改变的量称为常量。
常量分为:整型常量,如:12、0、-3;
实型常量,如:4.6、-1.23;
字符常量,如:'a'、'b';
注意:常量一般从其字面形式即可判别。这种常量常称为“字面常量”或“直接常量”。
1、符号常量的使用。
例如:
#define PRICE 30
#include "stdio.h"
void main()
{
int num,total;
num=10;
total=num*PRICE;
printf("total=%d\n",total);
}
结果为:300
解析:在此程序中我们用了#define命令行定义PRICE代表常量30,如此这样,此后凡在本程序中出现的PRICE都代表30,可以和常量一样进行运算。
符号常量:用一个“标识符”代表一个“常量”的符号。
符号常量与变量不同:
符号常量的值在其作用域内“不能改变”,而且也不能“再被赋值”。
使用符号常量的好处:
(1)、含义清楚(遵循“见名知意”)。
就拿上例来说吧,我们一看PRICE就知道PRICE代表价格。
注意:在一个规范的程序中不提倡使用过多的常数。
就拿sum=15*30*23.5*43来说吧,当我们在检查程序时就搞不清楚各个常数究竟代表什么。
(2)、在需要改变时能做到“一改全改”。
在上例的程序中多处用到某物品的价格,如果我们将价格用常数表示,则在价格调整时,就需要在程序中作多处修改,若用符号常量PRICE代表价格,只需要改动一处即可。
如:“#define PRICE 30”改为“#define PRICE 35”则在程序中所有以PRICE代表的价格就会一律自动改为35。
二、变量:代表内存中具有“特定属性”的一个存储单元,它用来存放“数据”,也就是“变量的值”,这些值是可以改变的。
注意:一个变量应该有一个名字,以便被应用。
变量名和变量值的区别:
变量名实际上是一个名字对应,代表一个地址。
在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址。
如:
注意:和其他高级语言一样,在C语言中用来对“变量”、“符号常量”、“函数”、“数组”、“类型”等数据对象命名的“有效数字序列”统称为“标识符”。可以简单的说,标识符(identifier)就是一个名字。
标识符:C语言规定标识符只能由“字母”、“数字”、“下划线”3种字符组成,且第一个字符必须为字母或下划线。
合法的标识符,可以作为变量名:
如: sum,average,_total,Class,day,month,Student,tan,lotus_1_2_3,BASIC,li_ling
不合法的标识符和变量名:
如:
M.D.John,¥123,#123,3D64,a>b
注意:编译系统将“大写字母”和“小写字母”认为是两个不同的字符。
如:sum和SUM是两个不同的变量名,同样,Class和class也是两个不同的变量名。一般,变量名用小写字母表示,与我们日常习惯一致,以增加可读性。
注意:编译系统IBM-PC的MSC,标识符的长度取8个字符。
程序中有两个变量名长度大于8个字符,则只有取前面8个字符有效,后面的不被识别。
如:student-name,student-number,由于二者的前8个字符相同,系统认为这两个变量是一回事而不加区别。可以将它们更改为:stud-name,stud-num。
Turbo C 则允许变量名有32个字符。
在编程前,应对编译系统进行了解,上述情况并不反映在编译过程中(即语法无错误),但就是运行结果不对。
在选择变量名和其他标识符时,应该做到“见名知意”,也就是说我们选择有含义的英文单词(或其缩写)作标识符,除了数值计算程序外,一般不用代数符号(如a,b,c,x1,y1)做变量名,以增加程序的可读性,这是结构化程序的一个特征。
在C语言中,要求对所有用到的变量作强制定义,也就是“先定义,后使用”,这样做的目的如下:
(1)、若变量名没有被事先定义,系统不把它认作变量名,这就能保证程序中变量名使用得正确。
(2)、每一个变量被指定为一个确定类型,在编译时就能为其分配相应的存储单元。
如指定a,b为int,Turbo C编译系统为a和b各分配两个字节,并按整数方式存储数据。
(3)、指定每一变量属于一个类型,这就便于在编译时据此检查在程序中要求对该变量进行的运算是否合法。
如:整型变量a和b,可以进行求于运算:
a%b
%是求余,得到a/b的整余数。
如果将a,b指定为实型变量,则不允许进行“求余”运算,在编译时会给出有关“出错信息”。