您的位置: 网站首页 > 程序开发 > C语言程序设计 > 第2章 基本数据类型及运算符 > 【2.3 常 量】

2.3 常 量

 

2.3     

在程序运行中,其值不能被改变的量称之为常量。在基本数据类型中常量分为整型常量、实型常量、符号常量和字符型常量(含字符常量和字符串常量)。

2.3.1  整型、实型及符号常量

1.整型常量

·    整型常量即为整型常数,可用十进制、八进制和十六进制3种形式表示。

·    十进制整型常量由09的数字组成,没有前缀,不能以0开始,没有小数部分。如:-1230456等。

·    八进制整型常量以0为前缀,其后由07的数字组成,没有小数部分。如:0123(等于十进制数的83),047(等于十进制数的39)。

·    十六进制整型常量以0x0X为前缀,其后由09的数字和AF(大小写均可)的字母组成,没有小数部分。如:0x123(等于十进制数的291),0X7A(等于十进制数的122)。

整型常量中的长整型数据可用L(或小写字母l)作为后缀来表示。如:1234L5678l等。

整型常量中的无符号型数据可用U(或u)作为后缀来表示。如:1234U5678u等。如果一个整型常量的后缀是U(或u)和L(或l),或者是LU,都表示为unsigned long类型的常量。如:12345UL67890ul等。

2.实型(浮点型)常量

实型常量是由整数部分和小数部分组成的,它只有十进制的两种表示形式。

1)定点数形式。它由数字和小数点组成。整数和小数部分可以省去一个,但不可两者都省,而且小数点不能省。如:1.234.123123.0.0等。

2)指数形式(或称科学表示法)。它是在定点数形式表示法后加e(或E)和数字来表示指数的。指数部分可正可负,但须为整数,且应注意字母e(或E)之前必须有数字。如:1.234e312.34e2均合法地代表了1.234×103;而e31e2.3.e3e均不合法。另外,实型常量的后缀用F(或f)表示单精度型,而后缀用L(或l)表示长双精度型。如:0.5e2f表示单精度数,3.6e5L表示长双精度数。

3.符号常量

在程序中,可以定义一个符号来代表一个常量,这种相应的符号称为符号常量。例如,用PI代表圆周率π,即3.1415926。使用符号常量有以下好处。一是增加可读性。在程序中出现具有一定意义的符号常量时,一看便能帮助读者了解其含义,即见名知义,如PI代表π、NAME代表姓名等。二是提高了可维护性。使用符号常量可使修改该常量变得更加方便。如在程序中直接使用某个常量,且该常量在程序中多处出现,若需修改该常量时,则需在每处出现该常量的地方都要加以修改,容易漏改或改错。其三,使用符号常量,则只要修改其定义处即可,即一改全改。如程序中出现某职工的姓名,且多处需要用此姓名,若用NAME符号常量代表姓名,一旦需要改变姓名,只要修改NAME的定义处即可。

C语言中,是用预编译处理命令#define来定义符号常量。如:

#define PI 3.1415926

#define NAME "姚木兰"

这种语句的格式是在#define后面跟一个标识符和一串字符,彼此之间用空格隔开。由于它不是C语句,故语句末不用分号(;)。当程序被编译时,它先被编译预处理。即预处理遇到#define时,就用标识符后的字符串替换程序中的所有该标识符。

习惯上,符号常量标识符用大写字母写出,以示与变量名区别。另外,符号常量标识符一旦定义,就不能在其他地方给该标识符再赋值。如,PI=3.14;是错误的。

2.3.2  字符型常量

字符型常量包含字符常量和字符串常量两类。

1.字符常量

用一对单引号括起来的一个字符称为字符常量,例如:'a''A''3''?'等。它的实际含义是该字符在内存中的编码值,常用的是以ASCII编码来表示字符,如:'a'的编码值是97'A'的编码值是65'3'的编码值是51而不是数值3

除了以上形式的字符常量外,C还允许使用一种特殊形式的字符常量,即以反斜杠符(\)开头,后跟字符的字符序列,称之为转义字符常量,用它来表示控制及不可见的字符(表2-2),它同样表示的是该转义字符的ASCII码值,如,\n表示换行,其ASCII码值为10\a表示响铃,其ASCII码值为7等。

2-2  常用转义字符

转义字符

   

ASCII

转义字符

   

ASCII

\a

响铃

0x07

\f

换页(走纸)

0x0c

\n

换行

0x0a

\0

空字符

0x00

\t

横向跳格

0x09

\\

反斜杠

0x5c

\v

竖向跳格

0x0b

\'

单引号

0x27

\b

退格(Backspace

0x08

\"

双引号

0x22

\r

回车

0x0d

\ddd

13位八进制数所代表的字符

对应字符的ASCII

转义字符\ddd(为八进制数字,0~7之一)将字符的ASCII码值转换为对应的字符,它表示任一个字符。例如,'\101'表示字符'A''\012'表示转义字符'\n''\0''\000'表示ASCII码为0的控制字符,即“空”字符。

2.字符串常量

字符串常量是用一对双引号("")括起来的零个或多个字符的序列,例如:

"This is a string"

"5401349"

"10000.00"

" "     /*引号中有一个空格,本书中用' '表示一个空格*/

""      /*引号中什么也没有*/

"\a"        /*引号中有一个转义字符*/

字符串常量在内存中存储时,系统自动在每个字符串常量的尾部加一个“字符串结束标志”字符'\0'。长度为n个字符的字符串常量,在内存中要占用n+1个字节的空间。

例如,"hello"在内存中的形式是:

104

101

108

108

111

\0

为了能直观理解,以后表示字符串时,直接用字符本身表示。上例表示成:

h

e

l

l

o

\0

【程序2-2分析下列程序的运行结果。

/* 文件名:chap02_2.cpp */

#include <stdio.h>

#include <string.h>

void main(){

    char *cstr="China\a\n\101\t\\";

    printf("%d\n",strlen(cstr));

    printf("%s\n",cstr);

}

程序运行结果:

10

China

A      \

程序中"China\a\n\101\t\\"是一个符号常量,由字符指针cstr指向它(有关字符指针的内容在后续章节中介绍)。该符号常量似乎有17个字符,事实上,它只有10个字符,分别是China\a\n\101(对应字符'A')、\t\,其中有5个转义字符。

字符常量A'A')与字符串常量A"A")的区别:

·    定界符不同。字符常量使用单引号,而字符串常量使用双引号。

·    长度不同。字符常量的长度固定为1,而字符串常量的长度可以是0,也可以是某个整数。

·    存储要求不同。字符常量存储的是字符的ASCII码值,而字符串常量除了要存储有效的字符外,还要存储一个结束标志\0

C语言中,没有专门的字符串变量,字符串常量如果需要存储在变量中,要用字符数组来解决。详细内容将在后续章节中介绍。