常量

在很多情况下我们需要常量,在整个程序的执行过程中,其值不会发生改变,比如一天有 24 个小时,最大缓冲区的大小,滑动窗口的最大值等。这些固定的值,即称为常量,又可以叫做字面量

常量也分为很多种,整型常量,浮点型常量,字符常量,字符串常量,下面我们分别来介绍

整数常量

整数常量可以表示为十进制、八进制或十六进制。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。

330         /* 合法的 */
315u /* 合法的 */
0xFeeL /* 合法的 */
048 /* 非法的:8 进制不能定义 8 */

浮点型常量

浮点型常量由整数部分、小数点、小数部分和指数部分组成。你可以使用小数形式或者指数形式来表示浮点常量。

当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。

3.14159       /* 合法的 */
314159E-5L /* 合法的 */
510E /* 非法的:不完整的指数 */
210f /* 非法的:没有小数或指数 */

字符常量

C 语言中的字符常量使用单引号(即撇号)括起来的一个字符。如‘a’,‘x’,'D',‘?’,‘$’ 等都是字符常量。注意,‘a’ 和 ‘A’ 是不同的字符常量。

除了以上形式的字符常量外,C 还允许用一种特殊形式的字符常量,就是以一个 “” 开头的字符序列。例如,前面已经遇到过的,在 printf 函数中的‘ ’,它代表一个换行符。这是一种控制字符,在屏幕上是不能显示的。

常用的以 “” 开头的特殊字符有

C语言的常量_#define

表中列出的字符称为“转义字符”,意思是将反斜杠()后面的字符转换成另外的意义。如 ‘ ’ 中的 “n” 不代表字母 n 而作为“换行”符。

表中最后第 2 行是用ASCII码(八进制数)表示一个字符,例如 ‘101’ 代表 ASCII 码(十进制数)为 65 的字符 “A”。‘12’(十进制 ASCII 码为 10)代表换行。

需要注意的是 ‘’ 或 ‘00’ 代表 ASCII 码为 0 的控制字符,它用在字符串中。

字符串常量

字符串常量通常用 "" 进行表示。字符串就是一系列字符的集合。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。

常量定义

C 语言中,有两种定义常量的方式。

  1. 使用 ​​#define​​ 预处理器进行预处理
  2. 使用 ​​const​​ 关键字进行处理

下面是使用 #define 预处理器进行常量定义的代码。

#include 

#define LENGTH 5
#define WIDTH 10

int main(){

int area = LENGTH * WIDTH;

printf("area = %d
", area);

}

同样的,我们也可以使用 const 关键字来定义常量,如下代码所示

#include 

int main(){

const int LENGTH = 10;
const int WIDTH = 5;

int area;
area = LENGTH * WIDTH;

printf("area = %d
", area);

}

那么这两种常量定义方式有什么不同呢?

编译器处理方式不同

使用 #define 预处理器是在预处理阶段进行的,而 const 修饰的常量是在编译阶段进行。

类型定义和检查不同

使用 #define 不用声明数据类型,而且不用类型检查,仅仅是定义;而使用 const 需要声明具体的数据类型,在编译阶段会进行类型检查。