首页 > 试题广场 >

下列哪个语句是正确的()

[不定项选择题]
下列语句是正确的是()
  • i++;
  • a=(b=(c=0));
  • a=b=c;
  • a = b+c = 3;
D像涉及到一组概念叫 左值 右值  b+c 是个右值,右值不能被赋值。
发表于 2020-03-11 20:14:41 回复(0)
简单赋值的优先级是低于加法优先级的,于是先执行b+c,会得到一个右值,而赋值语句中左边需要一个左值,简单理解就是加法完了之后得到一个数字,而这个数字无法被赋值;
发表于 2020-11-08 23:14:57 回复(1)
赋值运算符是从右往左计算的,返回值即等号左边对象的引用。 所以a=b=c计算顺序是(a=(b=c)),(b=c)运算结果为b的引用,而b已经被赋值为c,所以后面a的值等于c。 a=b+c=3的计算顺序为(a=(b+c=3)),b+c的运算结果是一个右值,不能被赋值为3 。记录
发表于 2022-03-12 10:13:46 回复(0)
a=b=c的写法可以。
根据赋值运算符的右结合性,先对b赋值,然后再对a赋值
发表于 2021-12-05 14:13:38 回复(0)

A.i++是一个递增操作符,用于将变量i的值加一。这是一个有效的语句。

B.a=(b=(c=0))是一个连续的赋值语句,其中变量c被赋值为 0,然后变量b被赋值为c的值(即 0),最后变量a被赋值为b的值(也是 0)。这是一个有效的语句。

C.a=b=c是一个连续的赋值语句,其中变量c的值被赋值给变量b,然后变量b的值被赋值给变量a。这是一个有效的语句。

D.a = b+c = 3是一个无效的语句。在 C++ 中,赋值操作符的返回值是赋给左侧变量的值,因此b+c的结果会被赋值给a,而b+c的结果是一个临时的中间值,无法再次被赋值。因此,这个语句是错误的。

综上所述,选项 A、B 和 C 都是正确的,而选项 D 是错误的。

发表于 2023-10-24 20:49:34 回复(0)
C++中不允许,是因为你到底是把谁的值赋给谁呢?
发表于 2019-07-21 22:00:57 回复(1)
D为什么不对呢?
发表于 2019-07-21 20:30:59 回复(6)
a = b+C = 3    //加法优先,然后赋值,这里没有意义
发表于 2021-03-07 11:26:34 回复(0)
D项中a+b表达式是临时值,只能是右值,不能作为可修改左值(C最新对于=运算符左值定义)
发表于 2021-01-11 16:03:55 回复(0)
<p>B为什么对呀</p>
发表于 2020-09-18 09:18:03 回复(2)
C选项感觉不太严谨,没有强调变量c被正确初始化,如果变量c没有正确初始化,会导致报错(VS2022)
编辑于 2024-03-11 20:37:53 回复(0)
b+c = 3本身就是错的
编辑于 2023-01-05 21:36:27 回复(0)
int a,b,c=0; a=b=c; 输出a=0
发表于 2022-07-15 09:45:23 回复(0)