刚学C语言,有两个表达式要请教大家

来源:百度知道 编辑:UC知道 时间:2024/05/31 03:06:51
a=5+c+d=a+5错在哪?
a=5+c,d=a+5错在哪?
题是这样的:
下面表达式符合C语言语法赋值表达式是:
A)a=5+c+d=a+5 B)a=c+d++=a+5 C)(5+b,d++,a+5) D)a=5+c,d=a+5 答案是C,这个选项我明白,就是那A,D两项,A项为什么不可以看作d=a+5;a=5+c+d;D项不是逗号表达式吗?怎么错了呢?

不好意思,小弟还没明白左值右值,能解释下吗?

谢谢!!!现在剩最后一个疑问了,a=5+c+d怎么是右值表达式?
a是个变量吧,按照赋值应该可以将5+c+d的值赋给它啊!

谢谢!!!你的意思我明白了,不过赋值语句应该是从右到左吧

课本上有一个例子说赋值有右结合性x=(y=8)可以写成x=y=8

a=5+c+d=a+5
赋值号左边只能是左值表达式 a=5+c+d是右值表达式
只有左值表达式 才能赋值
a=5+c,d=a+5两个语句之间应用分号隔开

====================
a=5+c+d=a+5
首先只有左值表达式 才能赋值
其次由于优先级的原因,先执行左边的等号。可以改为
a=5+c+(d=a+5)
这样就是你说的情况了。是正确的。

逗号表达式是在两个括号里的

=========================

左值表达式的概念你可以看看书,一般变量都是左值表达式,还有好像i++和++i也是;就是说可以放在等号左边的都是左值表达式,其余的是右值表达式,也就是不能给它赋值的都是右值表达式

===============
因为a=5+c+d的结果是返回a最后的值,是一个数值,数值是不能赋值的,就好像不能执行5=6一样。只有返回结果是分配了内存的变量时才能赋值

===============
a=5+c+d=a+5首先执行a=5+c+d,假设结果是15,那么就是15=a+5了,主要是后边不对

====================
赋值方式从右往左,但是两个等号优先级相同,所以先执行左边那个

a+5是赋值给c还是d,还是c+d,程序无法确认,当然错了。

a=5+c,d=a+5这个像最后加个;号看看会不会错?如果错的话将,号改为;号.

a=5+c,d=a+5
是可以作为逗号表达式看待的

a=5+c+d=a+5中的C和D 是否都已经赋值了呢,如果没有那就错,还有提醒你,如果是语句的话就应该有分号哦,要不然运行的时候会出错。

a=5+c+d=a+5
赋值号左边只能是左值表达式 a=5+c+d是右值表达式
只有左值表达式 才能赋值
a=5+c,d=a+5 语句之间应用分号隔开

a=5+c+d=a+5
这看上去像一个赋值表达式,不能把一个表达式赋