C编程从入门到实践
上QQ阅读APP看书,第一时间看更新

4.3.1 常量

在程序执行过程中,其值不发生变化的量称为常量。C语言中的常量分为如下两种。

1.直接常量

直接常量是直接根据字面形式即可判别的常量,也称为字面常量。在代码中直接常量可以直接输入数值,例如下面的代码。

    int mm=100;
    float nn=100.01

2.字符常量

在C语言中,可以用一个标识符来表示一个常量,这样的常量称为符号常量。定义C语言符号常量的方法有如下两种。

(1)用编译指令#define来定义。

编译指令#define定义常量的格式如下所示。

    #define常量名 常量值

其中“常量名”遵循的规则和变量的相同,习惯用大写字母表示符号常量名,小写字母表示变量名。看下面的代码。

    #define mm 10000
    float nn=12.1111

上述代码直接将常量值“10000”用字符常量“mm”来代替。

注意:“#define”是一条预处理命令(预处理命令都以“#”开头),称为宏定义命令(在后面预处理程序中将进一步介绍它),其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中出现该标识符的地方均表示该常量值。“#define”语句不以分号结尾,它可以放于源代码的任何位置。在定义常量时,只有在用它定义之后的源代码中,该标识符才有效。

(2)使用关键字const来定义。

const是一个修饰符,在定义一个常量时需要在它前加上此修饰符。在现实开发应用中,经常要在程序中的许多地方用到一个常数,可以给这个常数取个名字,然后该常数都以该名字来代替。

例如,可以用pi来表示π值。

    const float pi=3.1415926;

由于有效位的限制,在下面的常量定义中,最后3位不起任何作用。

    const float pi=3.141592653;

尽管等号后面的常数是双精度型的,但是因为单精度型常量只能存储7位有效位的实数,所以pi的实际值为3.141593(最后1位四舍五入了)。如果将常量pi的类型改为双精度型,则它能全部接受上述10位数字。

程序对于定义成const的常量,只能读不能修改,从而防止该值被无意地修改。由于不可修改,所以在定义常量时必须进行初始化。例如下面的代码。

    const float pi;
    pi=3.1415926;

常量名不能放在赋值语句的左边。

在定义常量的过程中,初始化的值可以是一个常量表达式。由于常量在程序运行之前就已经知道了具体的数值,所以在编译时就可以直接求值。但表达式中不能含有某个函数。例如下面的代码。

    const int size=100 * sizeof(int);
    const int number=max(15,11);

因为sizeof不是函数,而是C++中的基本操作符,该表达式的值在编译之前就能确定,所以第1个常量定义语句是合法的。第2个语句是求函数值,函数一般都要在程序开始运行时才能求值,但该表达式不能在编译之前确定具体的值,所以这是错误的。

一般来说,相同类型的变量和常量在内存中占有相同大小的空间。只不过常量不能通过常量名去修改其所处的内存空间,而变量却可以。