赋值运算符和赋值表达式

1、赋值运算符

等于号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量,也可以将一个表达式的值赋给一个变量。如,z=1 ; z=x+y; 。


2、复合的赋值运算符

在赋值运算符“=”之前加上其他运算符,可以构成复合的运算符。如:

a += 3; /*等价于a=a+3*/
a *= b+3; /*等价于a=a*(b+3)*/
a %= 3; /*等价于a=a%3*/

需要注意是上面第二行代码,要把(b+3)看做一个整体。


3、赋值表达式

由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。对赋值表达式的求解过程是:先求赋值运算符右侧的表达式的值(称为右值),然后赋给赋值运算符左侧的变量(称为左值)。一个表达式应该有一个值,例如,赋值表达式“a=1+2;”的值是3,执行表达式后,变量a的值也是3。

并不是任何对象都可以作为左值的,变量可以作为左值,而表达式a+b就不能作为左值,常变量也能作为左值,因为常变量不能被赋值。

左值可以出现在赋值运算符右侧,如a=a+1; 。

赋值表达式中的右值,还可以是一个赋值表达式,如a=(b=5); ,括号内的“b=5”是一个赋值表达式,它的值等于5。执行a=(b=5);相当于执行b=5和a=b两个赋值表达式,因此a的值等于5,b的值以及表达式的值都是5。因为赋值运算符按照“自右而左”的结合顺序运算,所以,(b=5)的括号是可以省略的,即可写成a=b=5。下面是一些赋值表达式的例子:

a=b=c=3;/*表达式的值为3,a,b,c的值也均为3*/
a=5+(b=6);/*表达式的值为11,a为11,b为6*/
a=(b=4)+(c=6);/*表达式的值10,a为10,b为4,c为6*/
a=(b=10)/(c=2);/*表达式的值为5,a为5,b为10,c为2*/

下面是一个比较特殊的赋值表达式:

(a=3*5)=4*3;

对于上面的赋值表达式,将先执行括号里的运算,将15赋给a,然后执行4*3的运算得到12,再将12赋值给a,最终a的值为12,整个表达式的值也为12。上面的代码是将赋值表达式当作了左值,在对赋值表达式(a=3*5)求解后,变量a得到值15,此时赋值表达式(a=3*5)=4*3其实相当于(a)=4*3,而不是(15)=4*3,正因为这样才使得赋值表达式能够作为左值。

赋值表达式作为左值时应加括号,如果写成下面的样子就会出现语法错误:

a=3*5=4*3; /*语法错误*/


将赋值表达式作为表达式的一种,使赋值做错不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(输出语句、循环语句等)中,如:

int a, b=123;
printf("%d\n",a=b);

这里b的值为123,则输出a的值(也是表达式a=b的值)为123。它在一个语句中完成了赋值和输出双重功能。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值