
2.1 数据的表示
2.1.1 常量和变量
在计算机高级语言中,数据有两种表现形式:常量和变量。
1.常量
生活中的有些事物需要用数值来表示,例如人民币、时间等。在程序中,同样会出现一些数值,例如123、1.5、'a'等,这些数值是不可变的,通常将它们称为常量。在C语言中,常量包括整型常量、实型常量、字符常量、字符串常量、符号常量等。
(1)整型常量。
整型常量是整数类型的数据,又被称为整常数,包括正整数、零、负整数。整常数可用以下三种形式表示,具体如下:
十进制整数,由数字0~9和正、负号组成,如123、-456、0;
八进制整数,以数字0为前缀,其后由数字0~7组成,如056(相当于十进制的46)、-017(相当于十进制的-15);
十六进制整数,以0x或0X为前缀,其后由数字0~9和字母A~F(大小写均可)组成,如0x3A(相当于十进制的58)、-0x2e(相当于十进制的-46)。
需要注意的是,由于生活中普遍使用十进制的方式来表示数字,那么在程序中为了符合使用习惯,通常也使用十进制来表示数字,在没有特定标识的情况下,都默认为十进制。
(2)实型常量。
实型常量也称为浮点数常量。在C语言中,实数只能用十进制表示。它有两种形式:小数形式和指数形式。
①小数形式:由数字0~9和正、负号组成。例如,1.、55.0、-6.6等均为合法的实数。注意,必须有小数点。
②指数形式:由尾数部分、字母E或e和指数部分组成,格式为±尾数E指数。如1.23E-2(表示的数值为1.23×10-2)、3.14E+3(表示的数值为3.14×103)等。
注意:
以小数形式表示实数时,必须有小数点,并且小数点的前、后至少一边要有数字;以指数形式表示实数时,字母E(或e)的前、后必须有数字,并且指数部分只能是整数。
(3)字符常量。
字符常量用于表示一个字符,一个字符常量要用一对英文半角格式的单引号括起来,可以分为两种形式。
①普通字符常量。它可以是英文字母、数字、标点符号,如'a'和'1'。当字符常量存储在计算机的存储单元中时,是以其代码(一般采用ASCII代码)存储的,例如字符'a'的ASCII码值是97。在上例中,'0x20'表示一个空白字符,即在单引号之间只有一个表示空白的空格,空白字符在ASCII码表中对应的值为'0x20'。附录A中的ASCII表列出了所有可以使用的字符。
②转义字符。对于控制符(如回车、换行等)与不可见的字符,在C语言中通过转义字符来表示。它是以\开头的字符序列,例如在1.3节案例中用过的\n代表一个换行符。常用的转义字符如表2-1所示。
表2-1 常见的转义字符

(续表)

注意:
①区分斜杠'/'与反斜杠'\',此处不可互换。
②\xhh十六进制转义不限制字符个数'\x000000000000F'=='\xF'。
(4)字符串常量。
字符串常量是用一对双引号括起来的字符序列。如"how do you do.""CHINA""a""$123.45""C language programming""a\\n""#123"等均为字符串常量。
存储:字符串中的字符依次存储在内存中一块连续的区域内,并且把空字符'\0'自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占n+1个字节。
(5)符号常量。
在C语言中,可以用一个标识符来表示一个常量,这个标识符称为符号常量。其特点是编译后写在代码区,不可寻址,不可更改,属于指令的一部分。符号常量在使用之前必须先定义,用#define指令,指定用一个符号名称代表一个常量,例如:

经过以上的指定后,本文件中从此行开始所有的PI都代表3.1416。但是后面我们学习完变量后,大家要注意区分字符常量和变量的区别。
2.变量
变量代表一个有名字的、具有特定属性的存储单元。变量用来存放数据,也就是存放变量的值。在程序运行期间,变量的值是可以改变的。变量必须先定义,后使用。由于数值的类型有多种,有整数、小数(浮点数)、字符等,那么对应的变量就有整型变量、浮点型变量、字符型变量。变量还有其他的具体分类。整型变量可具体分为无符号型、长整型和短整型。浮点型也可具体分为单精度型、双精度型和长双精度型。此外,还可以分为静态变量、外部变量、寄存器变量和自动存储变量。这些数据类型我们在本节和后面的章节中都会陆陆续续介绍。
通过前面的介绍我们知道,在定义变量时,还需要对变量进行命名,这个名字也称作标识符。
标识符的命名有一定的规则:
(1)标识符只能由字母、数字和下画线三类字符组成;
(2)第一个字符必须是字母或者下画线;
(3)大写字母和小写字母被认为是两个不同的字符,如A和a是两个不同的标识符;
(4)标识符可以任意长,但只有前32位有效。有些旧的C语言版本对外部标识符的限制为6位。这是由于连接程序的限制所造成的,而不是C语言本身的局限性;
(5)标识符不能是C语言的关键字。
在上面的规则中,有个关键字的概念。那么什么叫关键字呢?从表面字意上也可以看出,关键字是C语言本身某些特性的一个表示,是唯一代表某一个意思的。下面列出ANSI标准定义的C语言的32个关键字,这些关键字在以后的学习中基本上都会用到,届时会说明它们各自的用法。
auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while.
所以在以后的学习中,在给变量命名时要避开这些关键字。
一条变量说明语句由数据类型和其后的一个或多个变量名组成。变量说明的形式如下:

这里的类型是指C语言的有效数据类型,变量表是一个或多个标识符名,每个标识符之间用,分隔。下面我们来介绍一下数据类型。