Skip to content

LV050-常量简介

上边介绍了变量,接下来看一看常量吧。常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做 字面量。需要注意的常量一旦定义,是 不可以被修改 的。

一、整数常量

整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数: 0x 或 0X 表示十六进制, 0 表示八进制,不带前缀则默认表示十进制。

整数常量也可以带一个后缀,后缀是 U 和 L 的组合, U 表示无符号整数( unsigned ), L 表示长整数( long )。后缀可以是大写,也可以是小写, U 和 L 的顺序任意。

75 十进制
0253 八进制
0x4b 十六进制
50 整数
50u 无符号整数
50l 长整数
50ul 无符号长整数

二、浮点常量

浮点常量由整数部分、小数点、小数部分和指数部分组成。我们可以使用 小数形式 或者 指数形式 来表示浮点常量。使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。一般格式如下:

c
[+ or -]<整数部分><小数点><小数部分><e或者E>[+ or -]<指数>

例如:

c
3.14159       /* 正确的 */
314159E-5L    /* 正确的 */
-3.14e18      /* 正确的 */
    
510E          /* 错误的:不完整的指数 */
210f          /* 错误的:没有小数或指数 */
.e55          /* 错误的:缺少整数或分数 */

三、字符常量

字符常量是指用单引号 ' ' 括起来的一个字符,例如 'a' 、 'b' 等。C 语言中还存在一种特殊的字符常量——转义字符。转义字符以反斜线 \ 开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。

常用转义字符

转义字符 含义
\a 警报铃声
\b 退格键
\f 换页符,将当前位置移动到下页开头
\n 换行符
\r 回车
\t 水平制表符
\v 垂直制表符
\ooo 1~3 位八进制数所代表的字符
\xhh 1~2 位十六进制数所代表的字符
\\ \ 字符

注意

(1)字符常量只能用单引号括起来,不能用双引号或其他括号。

(2)字符常量只能是单个字符,不能是字符串。

(3)字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。例如 5 和 '5' 是不同的, '5' 是字符常量,不能直接参与运算,而只能以其 ASCII 码值( 053 )来参与运算。

四、字符串常量

字符串常量是指用一对双引号( " " )括起来的一串字符,双引号只起定界作用,双引号括起的字符串中不能是双引号( " " )和反斜杠( \ )。例如 "YES&NO" 、 "2-21" 和 "a" 等都是合格的字符串常量。在 C 语言中,字符串常量在内存中存储时系统自动在字符串的末尾加一个字符串结束标志,即 ASCII 值为 0 的字符 NULL ,通常用 \0 表示。

注意】 在 C 语言中,长度为 n 个字符的字符串常量在内存中占有 n + 1 个字节的存储空间。例如,

c
'a'  这是一个字符常量,占用一个字节空间
"a"  这是一个字符串常量,占用两个字节空间(多了一个'\0')

五、定义常量

1. define 定义常量

define 是一个预处理关键字,它的实际用途大于定义常量这一功能,其他的功能后边还会详细解释。通过 define 定义常量的一般格式为:

c
#define identifier value
  • identifier 为符号名,必须符合标识符的命名规则。
  • value 为替换列表,可以是任意的字符序列,如数字、字符、字符串、表达式等。

例如,

c
#define LENGTH 10   
#define WIDTH 5
#define BEEP '\a'
#define MSG "Hello World!"

2. const 定义常量

const 是 C 语言中的一个关键字,可以借助该关键字来定义常量,创建常量的格式如下:

c
const dataType name = value;

说明

const 定义常量的关键字
dataType 数据类型,基本数据类型都可以,如 int、char、float 等
name 常量名称
value 常量的值

注意

(1) const 和 dataType 位置可以互换,例如,

c
const int a = 10;
int const a = 10;

上边两种定义等价,但是一般推荐 const 在前。

(2)由于 常量一旦被创建后其值就不能再改变,所以常量必须 在定义的同时赋值(初始化),后面的任何赋值行为都将引发错误。