常量
在很多情况下我们需要常量,在整个程序的执行过程中,其值不会发生改变,比如一天有 24 个小时,最大缓冲区的大小,滑动窗口的最大值等。这些固定的值,即称为常量,又可以叫做字面量。
常量也分为很多种,整型常量,浮点型常量,字符常量,字符串常量,下面我们分别来介绍
整数常量
整数常量可以表示为十进制、八进制或十六进制。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。
浮点型常量
浮点型常量由整数部分、小数点、小数部分和指数部分组成。你可以使用小数形式或者指数形式来表示浮点常量。
当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。
字符常量
C 语言中的字符常量使用单引号(即撇号)括起来的一个字符。如‘a’,‘x’,'D',‘?’,‘$’ 等都是字符常量。注意,‘a’ 和 ‘A’ 是不同的字符常量。
除了以上形式的字符常量外,C 还允许用一种特殊形式的字符常量,就是以一个 “” 开头的字符序列。例如,前面已经遇到过的,在 printf 函数中的‘ ’,它代表一个换行符。这是一种控制字符,在屏幕上是不能显示的。
常用的以 “” 开头的特殊字符有
表中列出的字符称为“转义字符”,意思是将反斜杠()后面的字符转换成另外的意义。如 ‘ ’ 中的 “n” 不代表字母 n 而作为“换行”符。
表中最后第 2 行是用ASCII码(八进制数)表示一个字符,例如 ‘101’ 代表 ASCII 码(十进制数)为 65 的字符 “A”。‘12’(十进制 ASCII 码为 10)代表换行。
需要注意的是 ‘’ 或 ‘00’ 代表 ASCII 码为 0 的控制字符,它用在字符串中。
字符串常量
字符串常量通常用 "" 进行表示。字符串就是一系列字符的集合。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。
常量定义
C 语言中,有两种定义常量的方式。
- 使用
#define
预处理器进行预处理 - 使用
const
关键字进行处理
下面是使用 #define 预处理器进行常量定义的代码。
同样的,我们也可以使用 const 关键字来定义常量,如下代码所示
那么这两种常量定义方式有什么不同呢?
编译器处理方式不同
使用 #define 预处理器是在预处理阶段进行的,而 const 修饰的常量是在编译阶段进行。
类型定义和检查不同
使用 #define 不用声明数据类型,而且不用类型检查,仅仅是定义;而使用 const 需要声明具体的数据类型,在编译阶段会进行类型检查。