合法的C语言赋值表达式有什么规定?

img

有点搞不懂这个什么叫做合法的C语言赋值表达式,感觉a和b应该是错的,所以应该选哪个各位?

你可以敲一遍
会提示你表达式必须是可修改的左值

由于在赋值符“=”右边的表达式也可以又是一个赋值表达式, 因此,变量=(变量=表达式); 是成立的,从而形成 嵌套的情形。 其展开之后的一般形式为:变量=变量=…=表达式; 例如: a=b=c=d=e=5; 按照赋值运算符的右接合性,因此实际上等效于: e=5; d=e; c=d; b=c; a=b;
注意在变量==说明==中给变量赋初值和赋值语句的区别。 给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。 例如: int a=5,b,c;
在变量说明中,不允许连续给多个变量赋初值。 如下述说明是错误的: int a=b=c=5 必须写为 int a=5,b=5,c=5; 而赋值语句允许连续赋值。
注意赋值表达式和赋值语句的区别。 赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。

*p代表一个地址,&a代表对a取地址,两个都是地址,所以可以赋值。正确答案应该是B,只有B是把变量赋值为变量,其他三个都是把地址赋值为变量,是错误的。
赋值表达式和赋值语句不一样,赋值表达式可写作a=b=c=5,等同于a=5,b=5,c=5,而赋值语句只能写作a=5,b=5,c=5,不能写作a=b=c=5。
如有帮助,望采纳。