C++从入门到精通(第6版)
上QQ阅读APP看书,第一时间看更新

2.5 变量

变量是指在程序运行期间其值可以发生改变的量。每个变量都必须有一个名称作为唯一的标识,且具有一个特定的数据类型。变量使用之前,一定要先进行声明或定义。

2.5.1 变量的声明和定义

C++中,变量声明是指为变量提供一个名称,并告诉编译器这个变量将被使用,但不会为其分配内存空间。变量声明的一般形式如下:

数据类型 变量名;

其中,“数据类型”指变量的类型,如整型、浮点型、字符型等,“变量名”则是用户给变量起的名称,必须符合标识符的命名规则。

多个同一类型的变量可以在一行中声明,变量名之间用逗号隔开。例如:

int x;
int a,b,c;

定义变量时,需要为其分配一块内存空间,以存储其值。语法形式如下:

数据类型  变量名=初始值;

例如,下面定义了多个变量:

int x=10;
int a=,b=2,c=3;

注意

定义多个赋相同初值的变量时,应写成“int a=3, b=3, c=3;”形式,不能写成“int a=b=c=3;”形式。

2.5.2 整型变量

整型变量就是用来存储整型数值的变量。

根据占有的内存空间大小,整型变量可分为基本整型(int)、短整型(short)和长整型(long)3类。根据是否有符号,还可分为有符号整型(signed)和无符号整型(unsigned)两类。因此,整型变量共分为6类,如表2.3所示。其中,方括号中的关键字可以省略。

表2.3 整型变量的分类

不同的整型,其在内存中占用的字节空间不相同,因此可表述的变量数值范围也不同。以32位操作系统为例,短整型、整型、长整型变量占用的字节数和可表示的数值范围如表2.4所示。

表2.4 整型变量可表示的数值范围

例如,下面定义了一个整型变量a,为它分配了4个字节的内存空间,并设初始值为10。

int a=10;

变量赋值时,整型常量后可以加上L或l、U或u等后缀,清晰指明其类型,如1314L、520U等。

注意

根据CPU寄存器位数和编译器的不同,最大的整型数值也会不同。32位操作系统中,基本整型(简称为整型)为4字节,长整型为4字节;64位操作系统中,基本整型为4字节,长整型为8字节。

说明

C++程序中,布尔型(bool)被当作整型对待,false表示0,true表示1。因此,将布尔型赋值给整型是合法的,将整型赋值给布尔型也是合法的。例如:

2.5.3 浮点型变量

浮点型变量分为单精度(float)、双精度(double)和长双精度(long double)3类,其占用的字节数和可表示的数值范围如表2.5所示。

表2.5 实型变量可表示的数值范围

float和double相比,double类型的变量具有更高的精度,即它可以表示更多的小数位数。float保留到小数点后7位,有效数字为6~7位;double保留到小数点后16位,有效数字为15~16位。实际开发中,一般多使用double类型,尽可能地避免精度损失。

例如,下面代码声明了多个浮点型变量。

float a;
double b;
long double c;

在程序中使用浮点型数据时,需要注意以下两点。

1.浮点型数据相加

浮点型数据的有效数字是有限制的,如float的有效数字是6位或7位,如果将数字86041238.78赋值给float类型,显示的数字可能是86041240.00,个位数8被四舍五入,小数位被忽略。如果将86041238.78与5相加,输出的结果为86041245.00,而不是86041243.78。

2.浮点型数据与0进行比较

在开发程序的过程中,经常会进行两个浮点型数据的比较,此时尽量不要使用“==”或“!=”运算符,而应使用“>=”或“<=”之类的运算符。

例如,下述代码直接将浮点型变量与0进行比较,不是高质量的代码。如果程序要求的精度非常高,可能会产生未知的结果。

通常的做法是:定义0的精度,然后判断浮点数是否在该精度范围内。例如:

程序运行结果如图2.4所示。

图2.4 程序运行结果

注意

数字里可以有下画线,这些下画线不会影响数字的值,仅提供分隔作用,方便阅读。下画线不能写在数字开头或末尾,二进制和十六进制前缀字母旁,以及小数点旁。

2.5.4 变量赋值

变量的值是动态改变的,每次改变都需要进行赋值。变量赋值的形式如下:

变量名=表达式;

其中,表达式由运算符、操作数、括号等组成。最简单的表达式就是一个数。

我们在2.5.1节中已经学习过,声明变量时可以把数值赋给变量,这个过程叫变量赋初值。除此以外,还可以先声明变量,再为其赋值。例如,下面的代码先声明整型变量i,然后将常量100赋值给i。

例如,下面的代码声明了3个整型变量i、j、k,先为变量i、j赋值,再将i+j的值赋给k。

2.5.5 字符型变量

char关键字用来定义字符型变量,其在内存中占用1个字节。例如:

字符型变量在内存中存储的是字符的ASCII码,即一个无符号整数。其形式与整型变量的存储形式一样,因此字符型数据与整型数据之间可以通用。也就是说:

(1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。

(2)允许对字符数据进行算术运算,即对它们的ASCII码值进行算术运算。

误区警示

给char型变量赋值时不能使用3个单引号,否则编译器会无法识别开始和结束位置。例如:

     char cChar='A'';                /*使用3个单引号为字符型赋值*/

上述代码编译时会提示“error c2001:newline in constant”错误。

【实例2.1】字符型数据进行算术运算。(实例位置:资源包\TM\sl\2\1)

本实例中,定义两个字符型变量并赋值,一个字符进行减32计算,另一个字符进行加32计算,最后这两个字符分别进行加10计算,并通过格式化输出函数printf()以%d和%c格式输出。代码如下:

程序运行结果如图2.5所示。

编程训练(答案位置:资源包\TM\sl\2\编程训练\)

【训练1】字符B的无中生有 程序中不出现字符“B”,试着输出字符“B”。

【训练2】预测“B+32”的结果 以字符格式%c输出“'A'+32”的结果,观察结果,猜测一下“'B'+32”的结果。

图2.5 字符型数据进行算术运算