1.常量定义:
常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
2.常量分类:
常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。
3.常量特点
常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
常量可以直接在代码中使用,也可以通过定义常量来使用。
4.const修饰的常变量
5.枚举常量:一一列举,用到关键词enum
6.define定义的标识符变量
4.const修饰的常变量在C语言中只是在语法层面限制了变量不能直接被改变,但本质上还是一个变量。
const修饰后变量值不可修改,否则运行不起来。
#include <stdio.h>
int main()
{
const int a = 10;
a = 8;
printf("%d", a);
return 0;
}
当变量被const修饰时,不能再修改变量的值,否则会发生报错。
const修饰变量有两种写法:
(1)const int a = 10;
(2) int const b = 10;
这两个句子是一样的,const位置前后无影响.
使用const修饰变量不初始化
如果定义时未初始化,对于未初始化的局部变量,程序在执行时会自动把一个很小的负数存放进去。这样后来再给它“赋值”就“改变它的值”了,发生语法错误。
5.枚举常量是C语言中的一个基本数据类型,用于定义一组具有离散值的变量,是数据更简洁,易读。
定义一个枚举类型,需要用enum关键词,后面跟着枚举类型的名称,以及用{ }括起来一组枚举常量。每个枚举常量用一个标识符表示,也可以为它们指定一个整数值,如果没有指定,那么默认从0开始递增。
比如:
#include <stdio.h>
enum DAY
{
MON = 1, TUE, WED, THU, FRT, SAT, SUN
};
int main()
{
enum DAY day;
day = WED;
printf("%d", day );
return 0;
}
运行结果:3.
注意:如果不赋值,第一个枚举成员默认为整数0,后续枚举成员在前一个成员上加1.
枚举常量定义:
(1)先定义枚举类型,在定义枚举变量
enum DAY
{MON = 1, TUE, WED};
enum DAY day;
(2)定义枚举类型同时定义枚举变量
enum DAY
{MON = 1, TUE, WED} day;
(3)省略美剧名称,直接定义变量enum
enum
{MON = 1; TUE, WED}day;
6.define定义常量也叫做宏定义
C语言程序从编写到运行要经过预处理、编译、汇编和链接这四个阶段。
C语言中,可以用#define定义一个标识符来表示一个常量。其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。
定义形式:#define 标识符 常量
宏定义好处:方便程序修改
#include <stdio.h>
#define NUM 5
int main()
{
int i = NUM;
int arr[NUM] = { 0 };
int j = 0;
for (j = 0; j < i; j++)
{
printf("%d ", arr[j]);
}
return 0;
}
运行结果:0 0 0 0 0
可以看到i和arr【】在函数体中也可以使用宏定义的NUM
#define ADD(x,y)((x)+(y)) <==>int ADD(int x, int y)
(x,y)叫宏的参数,无类型。((x)+(y))叫宏体
#define 与 const区别:
(1)#define仅进行简单的文本替换,而const是声明一个具有类型的变量。#define定义的常量在编译时会被直接替换成其对应值,而const定义的常量在程序运行时会分配内存,并且具有类型信息。
(2)#define定义的常量没有作用域限制,它在定义之后的整个代码中都有效。而const定义的常量具有块级作用域,只在其所定义所在的作用域内有效。
(3)#define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。
const常量会在内存中分配(可以是堆也可以是栈中)。