
2.3 变量

视频讲解
视频讲解:资源包\Video\02\2.3变量.mp4
变量就是指在程序运行期间其值可以变化的量。每一个变量都是一种类型,每一种类型都定义了变量的格式和行为。数据各式各样,要先根据数据的需求(即类型)为它申请一个合适的空间。如果将内存比作一个宾馆,那么变量就相当于宾馆里的房间,房间号相当于变量名,房间类型相当于变量类型,入住的客人相当于变量值,示意图如图2.12所示。

图2.12 将内存比作一个宾馆的示意图
C++中的变量有整型变量、实型变量和字符变量。接下来分别进行介绍。
2.3.1 标识符
标识符(identifier)可以被简单地理解为一个名字,它是用来对C++程序中的常量、变量、语句标号以及用户自定义函数的名称进行标识的符号。
☑ 标识符命名规则:
➢ 标识符由字母、数字及下画线组成,且不能以数字开头。
➢ 标识符的大写字母和小写字母代表不同的含义。
➢ 标识符不能与关键字同名。
➢ 标识符尽量“见名知意”,应该受一定规范的约束。
☑ 不合法的标识符:
➢ 6A(不能以数字开头)。
➢ ABC*(不能使用*)。
➢ case(它是保留字)。
C++有许多保留关键字,如下所示。

常见错误
(1)标识符大小写书写错误,在书写标识符时要注意区分字母大小写。
(2)标点符号中英文状态忘记切换,在书写代码时应该采用英文输入法半角输入。
2.3.2 变量的声明及赋值
变量是指在程序运行时其值可以改变的量。每个变量都由一个变量名标识,每个变量也都具有一种特定的数据类型。
1.变量声明
变量在使用之前一定要定义或声明。变量声明的一般形式如下:

“类型”是变量类型的说明符,说明变量的数据类型。“修饰符”是任选的,可以没有。
多个同一类型的变量可以在一行中声明,不同的变量名用逗号运算符隔开。例如:

与

两者等价。
2.变量赋值
变量值是可动态改变的,每次改变时都需要进行赋值运算。变量赋值的形式如下:

“变量名标识符”就是在声明变量时定义的,“表达式”将在后面的章节中讲到。例如:

下面声明i是一个整型变量,100是一个常量。

3.变量赋初值
在声明变量时就可以把数值赋给变量,这个过程叫作“变量赋初值”。变量赋初值的情况有以下几种:
(1)int x=5;
表示定义x为有符号的基本整型变量,并为其赋初值为5。
(2)int x,y,z=6;
表示定义x、y、z为有符号的基本整型变量,并为z赋初值为6。
(3)int x=3,y=3,z=3;
表示定义x、y、z为有符号的基本整型变量,且均赋初值为3。
注意
在定义变量并赋初值时可以写成int x=3,y=3,z=3;,但不可以写成int a=b=c=3;这种形式。
2.3.3 整型变量
整型变量可以分为短整型变量、整型变量和长整型变量,变量类型的说明符分别是short、int和long。根据是否有符号,整型还可分为以下6种。
☑ 整型:[signed] int
☑ 无符号整型:unsigned [int]
☑ 有符号短整型:[signed] short [int]
☑ 无符号短整型:unsigned short [int]
☑ 有符号长整型:[signed] long [int]
☑ 无符号长整型:unsigned long [int]
方括号表示其中的关键字可以省略,例如,[signed] int可以写成int。
短整型(short)在内存中占用2字节的空间,可以表示数的范围是-32768~32767。如果是无符号短整型(unsigned short),则表示数的范围是0~65535。整型(int)占用4字节的空间,有符号整型表示数的范围是-2147483648~2147483648,无符号整型(unsigned int)表示数的范围是0~4294967295。长整型与整型占用的字节数相同,表示数的范围也相同,具体如表2.3所示。
表2.3 整型变量范围

说明
通常说的整型就是指有符号基本整型int。
常见错误
默认整型是int。如果为long类型变量赋值时没有添加“L”或“l”标识,则会按照如下方式进行赋值:

正确的写法为:

2.3.4 实型变量
实型变量也被称为浮点型变量,是指用来存储实型数值的变量,其中实型数值是由整数和小数两部分组成的。在C++语言中,实型变量根据实型的精度还可以分为单精度类型变量、双精度类型变量和长双精度类型变量,如表2.4所示。
表2.4 实型变量的分类

1.单精度类型
单精度类型使用的关键字是float,它在内存中占4字节,取值范围是-3.4×10-38~3.4×1038。定义一个单精度类型变量的方法是在变量前面使用关键字float。例如,定义一个变量fFloatStyle并赋值为3.14的方法如下:

注意
在为单精度类型变量赋值时,需要在数值后面加上“f”,表示该数值的类型是单精度类型,否则默认为双精度类型。
2.双精度类型
双精度类型使用的关键字是double,它在内存中占8字节,取值范围是-1.7×10-308~1.7×10308。
定义一个双精度类型变量的方法是在变量前面使用关键字double。例如,定义一个变量dDoubleStyle并赋值为5.321的方法如下:

2.3.5 字符变量
字符变量是指用来存储字符常量的变量。将一个字符常量存储到字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。
字符变量在内存中占1字节,取值范围是-128~127。定义一个字符变量的方法是使用关键字char。例如,定义一个字符变量cChar并赋值为'a'的方法如下:

说明
字符数据在内存中存储的是字符的ASCII码值,即一个无符号整数,其形式与整数的存储形式一样,因此在C++语言中字符数据与整型数据通用。例如:

在上面的代码中,首先定义了两个字符变量,在为这两个变量进行赋值时,其中一个变量被赋值为'a',另一个变量被赋值为97。最后显示的结果都是字符a。
一个字符数据,既可以字符形式输出,也可以整数形式输出。
实例01 字符数据与整型数据之间的运算
实例位置:资源包\Code\SL\02\01


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

图2.13 字符数据与整型数据之间的运算
拓展训练
(1)试着输出字符“A”和“a”的ASCII码值。(资源包\Code\Try\001)
(2)程序中不出现字符“B”,试着输出字符“B”。(资源包\Code\Try\002)
C++语言允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算。
实例02 对字符数据进行算术运算
实例位置:资源包\Code\SL\02\02

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

图2.14 对字符数据进行算术运算
拓展训练
(1)分别以整数形式(%d)和字符形式(%c)输出“'A'+10”的结果。(资源包\Code\Try\003)
(2)以字符形式(%c)输出“'A'+32”的结果,观察结果,猜测“'B'+32”的结果。(资源包\Code\Try\004)