一、什么是常量
在生活中,我们常用的量分为两种,一个是变量,一个是常量;
变量即为可变的量
同理,常量即为不可变化的量;在数学中,常量是一个反应一个实物相对静止状态的量;
在c语言中也是如此,常量在整个程序的运行过程中不可被改变。
在程序中恒定不变的量即为常量。
二、常量可以分为几类
字面常量
const修饰的常变量
#define定义的标志符常量
枚举常量
字面常量:
字面常量就是它字面上就是一个具体的数据值。
字面常量也有分为整型字面常量、浮点型常量、字符型常量等等。
int main() { 100; 'w'; 3.14159; 6; return 0 ; }
该代码中 100 ,6 为整型字面常量;'w' 为字符型字面常量 ;3.14159 为浮点型字面常量;
const修饰的常变量:
int main() { int i = 100; //此处i为变量 i = 20; //i可以重新赋值 //------------------------------ const int a =100;//此时a被const修饰,具有常属性 a = 20; //a具有常属性,不能被改变 //所以在运行下面的代码时程序会报错 return 0; }
在下面的代码中,a为变量,但是在const修饰之后,具有常属性;所以a不能被重新赋值,即a不能被改变,称为const修饰的常变量;
—— 但是为什么是常变量而不是常量呢??
int main() { const int pu = 0; int arr[pu] = {}; return 0 ; }
带着疑惑我们来看,当运行这段代码时,程序会报错;
在不支持C99的编译器中,数组只能使用常量,且不能使用变量;
(在支持C99的编译器引入了“变长数组”的概念,即变长数组的大小是可以使用变量来指定的,但是数据不能初始化)。
从这里就可以得知,pu被const修饰之后仍是变量,只是具有了常属性,
故称为“const修饰的常变量”。
#define定义的标识符常量
在c语言中,可以用#define来定义一个标识符用来表示一个常量。
#define MA_X 1000 //定义整型常量MA_X,且数值为1000 int main() { #define SUG_EST "often" //同理,SUG_EST也为常量,值为"often" #define PI 3.14159 //...... return 0 ; }
在上列代码中,MA_X ,SUG_EST,PI都为一个标识符,用来表示一个常量。
凡是以#开头的,都被称为预处理指令,也被称为预编译;预编译与编译不同,预编译是编译前的处理。
#define定义的标识符常量后不加 ' ; '
枚举常量
在中文意思中,枚举的意思为一一列举;
在C语言中也是一样,枚举常量即为一一列举的常量。在生活中有许多有意义的数据,例如一个人的性别,有男,有女,或者保密;一周有七天,周一、周二......周日等等。
而我们要在c语言中表示这些特殊意义的数据的时候,就可以用到枚举常量(ENUM)。
enum Sex { MALE, FEMALE, //每个数据中间应用,隔开 SECRET }; //此处的分号不可缺少
在这里我们涉及到一个新的关键词,叫做 enum -- 枚举数据类型。
在上段代码中 “Sex” 即为所定义枚举类型的名字
MALE , FEMALE , SECRET即为这个枚举类型的未来可能取值。
当以整型类型打印这个枚举常量的时候,打印出来的数据为0,1,2;
枚举常量的初始默认值从0开始。
同时,也可以给枚举常量赋初始默认值。
再给枚举常量赋初始默认值后,该枚举常量的默认值会从所赋的值开始算。
枚举常量为常量,所以也可以将它的值赋给一个变量。
enum Sex { MALE = 5, FEMALE, SERCRT } int main() { enum Sex sex = MALE; //sex即为创建的变量 return 0 ; }
该处若是打印sex,打印结果为5;