首页 > 试题广场 >

如果i=5;那么a=

[单选题]
如果i=5;那么a=(++i)--;之后,a和i的值各是多少?
  • a=6.i=6
  • a=5.i=6
  • a=6.i=5
  • a=5.i=5
这道题不该关联到C题库里。C++中:答案C,++i自增后返回自身(左值),接着i--自减并返回减前的旧值(右值),所以a是6,i最终一加一减值不变。但C语言里,++i 和 i++都是右值,编译不过的。
发表于 2021-03-11 00:04:31 回复(1)
<p>关系运算符优先级大于赋值所以先算括号内的i自增1,接着赋值优先于自减,因而先赋值a后,i再自减1</p>
发表于 2020-09-23 12:49:26 回复(0)
先自增,再赋值,在自减。
赋值运算符的优先级最低。
发表于 2017-04-18 22:07:53 回复(6)
我理解的是 () 和 后置自减运算符优先级为1级,所以先算(++i),此时 i=6,接着算 i--,i 的值为5,但是要下一次才生效,所以 a = 6,i = 5,赋值运算符的优先级为14
发表于 2019-08-31 09:36:59 回复(0)
选C
(++i)的值为6,i的值变为6
(++i)--的值为6(先幅值再减1),i的值变为5
发表于 2016-12-21 15:45:52 回复(0)
先排一下优先级,分别是后置递减>前置递增>赋值,由于加了括号,所以++i首先执行,之后,i=6,++i返回的结果是i这个对象,再对它执行i--,它会把对象i的值-1,所以此时i=5,但是返回的是没减之前的对象的值的副本,也就是6,所以选C。
发表于 2021-10-23 13:02:39 回复(0)
++i先在局部变量表中完成自加,即i=6,然后取到操作数栈,栈中i=6;
i--先将i值取到操作数栈,即操作数栈中数为i=6,然后在局部变量表中完成自减,i=5
最后进行赋值操作,将操作数栈中的i=6赋给局部变量表中的a,所以a=6,i=5
发表于 2021-03-18 23:00:40 回复(0)
这道题出错了 (++i)--的第一步计算(++i)的结果是一个左值
发表于 2021-03-22 11:41:46 回复(0)
****,看反了
发表于 2021-01-31 20:05:25 回复(0)