![零基础学C++(升级版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/660/49639660/b_49639660.jpg)
2.3 变量
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_35_3.jpg?sign=1739258744-w68xgbL8f13TZBeAeaTEz7tPuIldH18l-0-c7201ba380adee356febf96b312ee20f)
视频讲解
视频讲解:资源包\Video\02\2.3变量.mp4
变量就是指在程序运行期间其值可以变化的量。每一个变量都是一种类型,每一种类型都定义了变量的格式和行为。数据各式各样,要先根据数据的需求(即类型)为它申请一个合适的空间。如果将内存比作一个宾馆,那么变量就相当于宾馆里的房间,房间号相当于变量名,房间类型相当于变量类型,入住的客人相当于变量值,示意图如图2.12所示。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_35_5.jpg?sign=1739258744-6RYf942zFO9DYUB36kIBgqBjp1UyTRS9-0-455d224d0671eae9a54afe072716d572)
图2.12 将内存比作一个宾馆的示意图
C++中的变量有整型变量、实型变量和字符变量。接下来分别进行介绍。
2.3.1 标识符
标识符(identifier)可以被简单地理解为一个名字,它是用来对C++程序中的常量、变量、语句标号以及用户自定义函数的名称进行标识的符号。
☑ 标识符命名规则:
➢ 标识符由字母、数字及下画线组成,且不能以数字开头。
➢ 标识符的大写字母和小写字母代表不同的含义。
➢ 标识符不能与关键字同名。
➢ 标识符尽量“见名知意”,应该受一定规范的约束。
☑ 不合法的标识符:
➢ 6A(不能以数字开头)。
➢ ABC*(不能使用*)。
➢ case(它是保留字)。
C++有许多保留关键字,如下所示。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_36_1.jpg?sign=1739258744-jQxvnKUMZi6ZPcGnb0a1fywp9PnNL179-0-3eb59d73e75f1691c7c03e01418f078d)
常见错误
(1)标识符大小写书写错误,在书写标识符时要注意区分字母大小写。
(2)标点符号中英文状态忘记切换,在书写代码时应该采用英文输入法半角输入。
2.3.2 变量的声明及赋值
变量是指在程序运行时其值可以改变的量。每个变量都由一个变量名标识,每个变量也都具有一种特定的数据类型。
1.变量声明
变量在使用之前一定要定义或声明。变量声明的一般形式如下:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_36_3.jpg?sign=1739258744-pEj3Zy2Ts0pW2DlWLHQ38RDHBPgJBRGT-0-b829d0e663865733d018ce2fa63a4e77)
“类型”是变量类型的说明符,说明变量的数据类型。“修饰符”是任选的,可以没有。
多个同一类型的变量可以在一行中声明,不同的变量名用逗号运算符隔开。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_36_4.jpg?sign=1739258744-X0p9uvvyV85IvY692qkdFWln8MRloOT3-0-1e891c8a73d414414702445f24a98bb4)
与
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_36_5.jpg?sign=1739258744-4L6jvoDpoBiwgul4utARLzsNe9ylVIXG-0-33c34c0f5220f2ba098b0c85c6fa9ca4)
两者等价。
2.变量赋值
变量值是可动态改变的,每次改变时都需要进行赋值运算。变量赋值的形式如下:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_37_1.jpg?sign=1739258744-vvMSgLooFc2BuOGrcj6spEIiNlxreEK7-0-0960e0e4b048e9f322f25572ae8951b5)
“变量名标识符”就是在声明变量时定义的,“表达式”将在后面的章节中讲到。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_37_2.jpg?sign=1739258744-lBzAzvbrgxGwkB0J9mu5uoB3ygRdnoBg-0-51fd2477e0a46f0454d1c06c37362513)
下面声明i是一个整型变量,100是一个常量。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_37_3.jpg?sign=1739258744-vQGBKmjvpAUDDGFgIoub1xXSb6FTW65v-0-3695e607a3410e8a62614a8ba7185fc5)
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 整型变量范围
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_38_1.jpg?sign=1739258744-JRm9u9K8YPiGuQqWriNbm75dbJI9Y4zv-0-a62665659912ff3757660ffdac592f4a)
说明
通常说的整型就是指有符号基本整型int。
常见错误
默认整型是int。如果为long类型变量赋值时没有添加“L”或“l”标识,则会按照如下方式进行赋值:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_38_4.jpg?sign=1739258744-rCJ7FSmwl14XYcFagfhwWlmtZV7bcA31-0-5e45844d8d0de24a7f5c3609ae6170ae)
正确的写法为:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_38_5.jpg?sign=1739258744-Nw4Y73y3T6tFCfsyGGNpXin67Grj0LEL-0-180037c6a44b026979dd93bf86598cac)
2.3.4 实型变量
实型变量也被称为浮点型变量,是指用来存储实型数值的变量,其中实型数值是由整数和小数两部分组成的。在C++语言中,实型变量根据实型的精度还可以分为单精度类型变量、双精度类型变量和长双精度类型变量,如表2.4所示。
表2.4 实型变量的分类
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_38_6.jpg?sign=1739258744-eYnV4G01P0enXqpjv30S2dcsiyklGi7e-0-c77b9aae73194d816137029cdf20971f)
1.单精度类型
单精度类型使用的关键字是float,它在内存中占4字节,取值范围是-3.4×10-38~3.4×1038。定义一个单精度类型变量的方法是在变量前面使用关键字float。例如,定义一个变量fFloatStyle并赋值为3.14的方法如下:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_38_7.jpg?sign=1739258744-ZwFogXjauKfxLocYHrxlOaUMURXdyeuc-0-c7202d9db46e63132ccd9e92af036ab4)
注意
在为单精度类型变量赋值时,需要在数值后面加上“f”,表示该数值的类型是单精度类型,否则默认为双精度类型。
2.双精度类型
双精度类型使用的关键字是double,它在内存中占8字节,取值范围是-1.7×10-308~1.7×10308。
定义一个双精度类型变量的方法是在变量前面使用关键字double。例如,定义一个变量dDoubleStyle并赋值为5.321的方法如下:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_39_2.jpg?sign=1739258744-ySYAMrT7vNsadPj0srZwrDM6yLHElKEQ-0-09a87788c1b40f481c9f5aa651685008)
2.3.5 字符变量
字符变量是指用来存储字符常量的变量。将一个字符常量存储到字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。
字符变量在内存中占1字节,取值范围是-128~127。定义一个字符变量的方法是使用关键字char。例如,定义一个字符变量cChar并赋值为'a'的方法如下:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_39_3.jpg?sign=1739258744-jZ5ZRKb0F5mguwg7e1EQvGt4x6DUpCw0-0-5b2cb3db40076345686ae0db2534255d)
说明
字符数据在内存中存储的是字符的ASCII码值,即一个无符号整数,其形式与整数的存储形式一样,因此在C++语言中字符数据与整型数据通用。例如:
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_39_5.jpg?sign=1739258744-AoLaHIhZ3p553ctOZqwvAYCEjZxRSc1M-0-8fdca7506fc51338912a3714b205427f)
在上面的代码中,首先定义了两个字符变量,在为这两个变量进行赋值时,其中一个变量被赋值为'a',另一个变量被赋值为97。最后显示的结果都是字符a。
一个字符数据,既可以字符形式输出,也可以整数形式输出。
实例01 字符数据与整型数据之间的运算
实例位置:资源包\Code\SL\02\01
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_39_6.jpg?sign=1739258744-gP1NuYjt7ig4BSAoU1vUIjXdvtMjP3oU-0-2c95c047ce824560bf44d811864d8263)
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_40_1.jpg?sign=1739258744-DWWvPVU4VB5G71PHrxlY1JVtWgDIgbFJ-0-726b60e39ce0f8c1766517fb673352ca)
程序运行结果如图2.13所示。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_40_2.jpg?sign=1739258744-EA69LFKscxegtux14Mra7k17qTl18FGZ-0-2148d035250e9146305dd7c556ee8a78)
图2.13 字符数据与整型数据之间的运算
拓展训练
(1)试着输出字符“A”和“a”的ASCII码值。(资源包\Code\Try\001)
(2)程序中不出现字符“B”,试着输出字符“B”。(资源包\Code\Try\002)
C++语言允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算。
实例02 对字符数据进行算术运算
实例位置:资源包\Code\SL\02\02
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_40_4.jpg?sign=1739258744-lGEK2X4IeEMqXvLfUDuLJso3df1UYZBp-0-5bdb354cd46c4c9020e46ea2be2112d1)
程序运行结果如图2.14所示。
![](https://epubservercos.yuewen.com/D77079/29142624407383406/epubprivate/OEBPS/Images/42276_40_5.jpg?sign=1739258744-f3FKdE2FeqKTCEvlxxTUKU3ZZNTyWrNi-0-a074e67b1eb172068f8122d42031d428)
图2.14 对字符数据进行算术运算
拓展训练
(1)分别以整数形式(%d)和字符形式(%c)输出“'A'+10”的结果。(资源包\Code\Try\003)
(2)以字符形式(%c)输出“'A'+32”的结果,观察结果,猜测“'B'+32”的结果。(资源包\Code\Try\004)