2.2 常量 与 变量
顾名思义,常量是运算中不能改变数值的数据类型,变量是可改变数值的数据类型。根据需要,可将一些在程序中不必改变数值的类型定义为常量,这样也可避免因修改数值造成程序错误。任何改变常量数值的操作都会引起编译错误。
2.2.1 标识符命令
C语言程序中,每个数据都有其标识符,如常量名、变量名、函数名或宏名。标识符是数据或程序模块的名字,一般情况下,只能通过标识符操作对应的数据或模块。ANSI C规定了标识符的命令规则,第一个字符必须为下划线或英文字母,其后的字符必须为下划线、数字或英文字母。例如,year、month01、_day都是正确的命令,而2year、mon!th01、day..one是错误的命名。另外,标识符命令时要避免与C语言关键字相同。
标识符的长度不受限制,但ANSI C标准考虑到程序的移植性,要求不同源代码间相互引用的外部名称必须能够由前 8 个字符进行区分。这是因为对某些仅能识别8个字符的编译器而言,外部名calcount1、cacount2
将被当做同一个标识符处理。同一个源代码文件中的标识符称为内部名称,ANSI C标准要求内部名称至少能通过前31个字符区别。虽然常量名、变量名、函数名或宏名代表程序的不同部分,但不能使用同一个名称。
C语言严格区分英文字母的大小写,例如,变量名 number、Number、NUMBER是不同的标识符。
2.2.2 常量
C语言中的常量有 4 种基本类型:
- #define定义的符号常量;
- 字符、字符串常量、数值常量;
- 常量变量;
- 枚举常量;
符号常量通常出现在文件的开始,它更像是编辑器的字符串替换操作。下列是#define的用法:
#define PI 3.14 // 定义常量数值
#define NAME "Micro Computer" // 定义一个常量字符串
字符、字符串常量 和 数值常量是直接在源代码中出现的字符、字符串和数值,因为程序运行时它们会在内存中占据固定内存,
所以认为它是常量。下列是使用字符、字符串常量和数值常量用法:
putchar('D'); // 单引号中的是字符常量
printf("Micro Scott"); // 双引号中的是字符串常量
a = 500.234; // 赋值符号右边的是数值常量
常量变量是一种特殊的常量,它实际是用 const 修饰符限制了变量改变其值。下列是
常量变量的定义方法:
const int dog_count = 65; // dog_count 是定义的整型常量,其值为 65
枚举常量是一种聚合类型,它有多个成员,默认情况下第一个成员所代表的数值是 0,后面的成员所代表的数值在前面成员的数值上加 1。也可以在定义枚举常量时为成员赋值,示例代码如下:
enum weekday {MON = 1, TUE, WED, THU, FRI, SAT, SUN}; // 定义枚举常量和成员,将 MON 的值设置为 1
printf("%d", SUM); // 输出成员 SUN 的值
该例的输出结果为 7,第 1 个成员 MON 值为 1 后,第 7 个成员的值要在第 1 个成员的基础上加 6,所以 SUM 的值为 7。
2.2.3 变量
运算中可以改变数值的数据类型称为变量。每个变量拥有唯一的名字,在内存中占据一定的存储单元,在该存储单元中存放变量的值。所有的 C变量必须在使用之前声明,声明变量的一般形式是:
数据类型 变量名;
下列定义了一个整型变量并为其赋值:
int count; // 定义一个整型变量,变量名为 count
count = 25; // 为变量 count 赋值
声明变量和为变量赋值也可以从两个合并为一个 ,如 “int count = 25;”。也可以同时声明多个变量并为其赋值,变量或表达式间以逗号分隔,如“int count = 25, lenth;”。
变量在被使用前必须先赋值,未赋值前,其值可能会是对应数据类型中的任意一个数字。如果变量被声明,但在整个程序中未对其赋值或使用,则 GCC 编辑器会给出一个警告信息。