首页 > 试题广场 >

已知int i=1, j=2;,则表达式i+++j的值为(

[单选题]

已知int i=1, j=2;,则表达式i+++j的值为( )

  • 1
  • 2
  • 3
  • 4
选C。
优先级:后置++  高于  前置++  高于  +   因此先运算i++,i++为1(注意后++的话,i++还是1,而
i是2)然后再加上j=2,所以为3

发表于 2018-05-07 20:09:47 回复(1)
将上述语句理解为(i++)+j的话就应该选C,理解为i+(++j)的话就应该选D。
但是如果只从后缀运算符优先级高于前缀运算符优先级这一点出发就选C,感觉有点牵强。

个人认为,由于C++中的运算符绝大多数为左结合性,作为后缀运算符的后缀++和四则运算+都是左结合的,而作为单目运算符的前缀++是右结合的。正常情况下,如果一个表达式中出现结合性不同时,为避免误解最常见的处理方式就是对结合性不同的部分添加圆括号。而这道题没有,所以该表达式的结合性应该是一致,因此+++应该理解为后缀运算符与+的组合,选C

相信很多小伙伴也尝试过,直接用编译器对答案进行验证,也确实是(++)+。这是因为C/C++编译器在对程序编译时,会从左到右尽可能多的将字符组合成一个运算符或标识符,这就是通过编译器验证+++被分为(++)+的原因。

以上为个人见解,如有错误,还请指正。
编辑于 2018-06-08 16:45:10 回复(0)
C陷阱与缺陷里有说,运算符遵循贪心法原则,就是 i++ + j。++在运算结束后算,所以选c
发表于 2018-11-29 15:53:27 回复(0)
C,后置++的优先级高于+和前置++,所以先i++,但因为是后置所以i++的返回值仍是1,即i+++j = 1+j = 1+2 = 3;
发表于 2020-08-27 17:02:54 回复(0)
运算符贪心 单目运算符,优先级 ++后算
发表于 2019-04-09 11:23:32 回复(0)
单目运算符优先级高于算术运算符
所以先 i++ 后 + j
发表于 2018-09-10 20:53:07 回复(0)
到底是i+(++j)还是(i++)+j?
发表于 2018-05-07 17:09:58 回复(2)
i++虽然要加1,但是先赋值到运算式中为1+j(然后这时候i变为2),之后1+j即为3
发表于 2022-03-12 21:38:29 回复(0)
a+++++b这个表达式如何理解? a++ ++ +b理解,但编译器最终会报错。编译的过程分为词法解析和语法解析两个阶段,在词法解析阶段,编译器总是从前到后找最长的合法Token。语义解析阶段,++运算符要求操作数能做左值,a能做左值所以a ++没有问题,但表达式a ++只能做右值,不能再++了,所以编译器最终会报错。
发表于 2021-08-24 10:29:56 回复(0)

#include<stdio.h>    
int main()
{
    int i = 1, j = 2;
    printf("%d", i+++j);//没有空格,输出3
}

#include<stdio.h>    
int main()
{
    int i = 1, j = 2;
    printf("%d", i+ ++j);//有空格,输出4
}
 我理解为:  编译器的贪心规则。
不过你想单纯的记住的话可以这么记:后置++和后置--的优先级比前置的要高一点。因此a+++b就是指(a++)+b而不是a+(++b)了。
编辑于 2019-01-15 11:11:40 回复(0)
我觉得还是二楼那个比较合理运算规则慈宁宫做往右,+++被解释成为了 后置++ 与+,如果按照优先级来看那一定是选d额
发表于 2022-08-11 06:41:27 回复(0)
老谭浩强了
发表于 2020-10-07 16:01:36 回复(0)
考点,符号优先级 题解,后置比++优先级高
发表于 2020-08-01 17:16:07 回复(0)
我这里看就是i+++j,贱题!
发表于 2023-09-15 14:43:14 回复(0)
从C陷阱与缺陷中理解,会从左向右扫描,先读到++会认为是一个运算符,再有一个-就理解我减号。如有问题请指正
发表于 2021-03-31 11:05:39 回复(0)
加个条件在VC++中,
发表于 2020-03-21 10:22:59 回复(0)
个人拙见,++是单目运算符,+是单数运算符,++优先级要大于+所以先运行++,i++在本行不算加所以还是1,1+j=3。
发表于 2018-08-18 20:43:49 回复(0)
优先级 后置++  高于  前置++ 
发表于 2018-07-15 12:13:01 回复(0)
++j返回是左值,而i++返回右值。所以(i++)+j是两个右值相加,类似于3+2,所以没有问题。若看成i+(++j),而左值应该是在=左边,所以不能是++j必须出现在等号左边。 
发表于 2018-06-25 19:00:22 回复(0)