![C++ 从入门到项目实践(超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/805/26846805/b_26846805.jpg)
5.7 赋值运算符与赋值表达式
在C++中,将数据存放在相应存储单元中称为“赋值”。如果该单元中已有值,赋值使新值取代旧值。而从某个存储单元中取出数据使用,称为“引用”。引用也是对数据的使用,但不影响单元中的值,即一个量可以多次引用。
5.7.1 赋值运算符
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P91_13812.jpg?sign=1738887575-Z1jGc7cGzdvhIM9lL735ITAbtRfcZnmM-0-07441c8a2c2a244e9ecbfaa1c9aa83fc)
赋值符号“=”就是赋值运算符,它的作用是将赋值号右边的值送到左边变量所标识的单元中。左操作数称为“左值”,而右操作数称为“右值”。
例如:
左值 = 右值
如“x=2”的作用是执行一次赋值操作(或称赋值运算)。把常量2赋给变量x。也可以将一个表达式的值赋给一个变量。
注意:赋值号不是等号,它具有方向性。“左值”必须是放在内存中可以访问且可以合法修改值的存储单元,通常只能是变量名;“右值”则可以是常量,也可以是变量或表达式,但一定要能取得确定的值。
5.7.2 赋值过程中的类型转换
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P91_13815.jpg?sign=1738887575-yRwVoTRmym6gCh4zOF9nRT9C6NKDBovY-0-171646da7dcc41532f745be8f4f4b700)
如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时会自动进行类型转换。
将浮点型数据(包括单、双精度)赋给整型变量时,舍弃其小数部分。
【例5-10】编写程序,将两个浮点型数据的和赋给一个整型变量。
(1)在Visual Studio 2017中,新建名称为“5-10.cpp”的Project10文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P92_13999.jpg?sign=1738887575-olr6J59Myb0N4ckc5nonVT2YerqVkwyc-0-c07b0fa9b44a5f77e26ba2c58d14ca48)
【程序分析】在本程序中,首先定义两个浮点型的变量a和b,并附赋值1.4和2.3。再定义一个整型变量x,将变量a和b相加,并将值赋给变量x。由于x是个整型数据,所以在输出时只输出一个整型数据。
在Visual Studio 2017中的运行结果如图5-12所示。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P92_13988.jpg?sign=1738887575-Mg42SFfsOvJmx5U9Vvt9zEsajK9BCq8f-0-8f6ee2309a83cdd1e00450d974311d80)
图5-12 浮点型转换成整型
将整型数据赋给浮点型变量时,数值不变。
【例5-11】编写程序,完成将两个整数相除后的值赋给一个double型的变量。
(1)在Visual Studio 2017中,新建名称为“5-11.cpp”的Project11文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P92_14000.jpg?sign=1738887575-XM2labBUqinXfNS49NsDBWuMa1mbwM9O-0-bc13a5f4f1e977a0ecbc856ec8d19a68)
【程序分析】在本程序中,首先定义两个整型变量a和b,并赋值7和5。再定义一个浮点型变量x,然后将a和b相除的结果赋给变量x。因为a和b都是整数,该除法将执行整除运算,再将整数结果1转换为单精度类型后进行赋值。所以,结果x=1。
在Visual Studio 2017中的运行结果如图5-13所示。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P92_13996.jpg?sign=1738887575-a52UhNALMTcCy0Gj1lpREYnBpinMQTgc-0-f7008e66c1b2a77d274575ce4260b2e1)
图5-13 double型转换成int型
将一个double型数据赋给float变量时,要注意数值范围不能溢出。
【例5-12】编写程序,将一个double型数据赋给一个float型的变量。
(1)在Visual Studio 2017中,新建名称为“5-12.cpp”的Project12文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P92_14001.jpg?sign=1738887575-DWz0OOpWRDNaf0IOWppxYQIvMAgo2NJ4-0-20ac8b207e32fa1db8988fd478ad2491)
【程序分析】在本程序中,首先定义两个变量,分别为double类型的变量a和float类型的变量x,然后为变量a赋值为3.1415926,接着再将a赋给变量x。由于float类型的精度低于double类型,所以,最后输出x的值会发生数据丢失。
在Visual Studio 2017中的运行结果如图5-14所示。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P93_14190.jpg?sign=1738887575-cK5F4qUK9n0Uddh3zavGHr9vPyMhXGRH-0-bce42c6cb0a3a9152624b3236cd1a3ea)
图5-14 double型转换成float型
5.7.3 复合赋值运算符
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P93_14193.jpg?sign=1738887575-u21R8PJhceaduVv9Pi0rxMl1bNcM3kDc-0-bfbf1dad6b63bfbad32f9628f42f84dc)
在赋值符“=”之前加上其他运算符,可以构成复合的运算符。如果在“=”前加一个“+”运算符就成了复合运算符“+=”。复合赋值运算符的要求与格式和赋值运算符完全相同。
语法格式为:
<变量> <复合赋值运算符> <表达式>;
等同于:
<变量> = <变量> <运算符> (<表达式>);
例如:
x+=3; //等同于 x=x+3;
见表5-10列出了C++支持的复合赋值运算符。
表5-10 复合赋值运算符
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-T93_14197.jpg?sign=1738887575-QjIKFfciOV3Hy7aJKSKmKIW8faKAWrZd-0-0f2147efe9fdca78de7ab8a87bf76d7c)
【例5-13】编写程序,使用复合赋值运算符。
(1)在Visual Studio 2017中,新建名称为“5-13.cpp”的Project13文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P93_72170.jpg?sign=1738887575-fauiVGnWMH9GTU6A7psP9NvN1TM1JQsi-0-d94111f48e2e8c32d64fcad3207e63fb)
【程序分析】本例定义了两个整型变量x、y并赋值,通过运算演示了复合运算符在实例中的运用。
在Visual Studio 2017中的运行结果如图5-15所示。
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P94_14392.jpg?sign=1738887575-XDC0rCbPMZwMFE0odKpVTUCaBDv3UOnC-0-5f8a8f71fc1673619326fa2496fd5b79)
图5-15 复合运算符
C++之所以采用这种复合运算符,一是为了简化程序,使程序精练,二是为了提高编译效率。专业的程序员在程序中常用复合运算符,初学者可能不习惯,也可以不用或少用。
5.7.4 赋值表达式
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P94_14402.jpg?sign=1738887575-ERSME9IFzHGc9wpuQVwZSqXRAGDuutnu-0-ff2b0784d29e2f5d22d1ec16c931a6a2)
赋值表达式是由赋值运算符将一个变量和一个表达式连接起来的式子。
语法格式为:
<变量> <赋值运算符> <表达式>
例如:
x=3+5;
该语句就是赋值表达式。对赋值表达式求解的过程是:先求赋值运算符右侧的“表达式”的值,然后赋给赋值运算符左侧的变量。一个表达式应该有一个值。赋值运算符左侧的标识符称为“左值”(left value,简写为lvalue)。
注意:并不是任何对象都可以作为左值的,变量可以作为左值,而表达式a+b就不能作为左值,常变量也不能作为左值,因为常变量不能被赋值。
出现在赋值运算符右侧的表达式称为“右值”(right value,简写为rvalue)。显然左值也可以出现在赋值运算符右侧,因而左值都可以作为右值。
例如:
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P95_14508.jpg?sign=1738887575-O0PNDywYWGn2iIpN1zgBGGH2ccq9QGOp-0-f473692fdd83d1a5e81fed16d98e3e32)
赋值表达式中的“表达式”,又可以是一个赋值表达式。
例如:
x=(y=5);
下面是赋值表达式的例子:
![](https://epubservercos.yuewen.com/F7D2C7/15289822205524706/epubprivate/OEBPS/Images/Figure-P95_14509.jpg?sign=1738887575-iF20GILeNpLOTx2sfu0r03zfqp2Hcqzb-0-56955857ad07c85cc50f70b9a3b7f643)