请各位高手帮我做一下这道题吧:

来源:百度知道 编辑:UC知道 时间:2024/05/26 21:46:41
设有如下的变量定义: int i =8,k ,a,b ; unsigned long w=5; double x=1,42,y=5.2; 则以下符合C语言语法的表达式是【 】 A) a=a+=(b=4)*(a=3) B) x%(-3); C ) a=a*3=2 D) y=float(i)

A

关于赋值表达式有如下要求:
〈变量〉〈赋值运算符〉〈表达式〉
(1)左值可以是变量,表达式不能作为左值,故c错;如果赋值表达式要作为左值则应该加括号,所以a是对的。
(2)赋值表达式的中的“表达式”也可以是一个表达式。
(3)赋值表达式也可以包含复合表达式。
(4)变量也可以作为右值。

平时多用就知道了!
不知我的解答你是否能明白!

D

D是对的,a看起来很诡异,但是确实能够编译通过。
=和+=是按照从右往左的顺序执行的;首先(b=4)将b赋值为4,并返回b的值4;(a=3)将a赋值为3,并返回3。4*3=12,然后执行a+=12。
由于a=3,所以a+=12变成15。最后执行a=15。所以最后的结果是15.