谁能帮我解决一下这个C语言的题,在线等。

来源:百度知道 编辑:UC知道 时间:2024/05/16 06:07:59
设 int i=2 求(++i)+(++i)+(++i)

在VC++中运行后 等于13
我想知道是怎么等于的

++i是先进行加1,再把值给表达式。当运行(++i)+(++i)两个括号之间的加号时,先看两边的括号,由于里面都是++i,所以执行了两次++i,此时i=4。则(++i)+(++i)=8,然后进行第二个+号运算时,前面的值为8,后面的为表达式++i,故进行++,此时i=5,8+5=13。输出13。

我经过大师的指点,是 4+4+5

注意,不同编译器对类似表达式的解释方式是不同的。 正式开发中严格禁止此类似表达式!

这个题,这样子的题,用一堆加加减减放在加减号的两面,等号的两面的题不要再做了,请你也不要再为它的结果而好奇了,这个13仅仅是一种解释,不同的编译器的结果会不同的,而不同的结果也不能说是谁对谁错,它们都有自己的解释,不知道说了这么一堆你听懂没,就是说这个加号减号的运算顺序是不确定的,注意是运算顺序,不是结合顺序,比如(++i)+(++i)+(++i),这个式子,你只能根据优先级的表确定括号里面的先执行,但是谁都不能确定的告诉你三个式子是哪个先执行,所以有了不同的结果,在c的标准里面,这个是没有规定运算顺序的,在c的标准里面,有且仅有四个运算符是规定了运算顺序的,注意是运算顺序,那就是与&&,或||,逗号运算符,,唯一的三目运算符?:,除了这四个运算符规定是从左到右执行的,剩下的都没有规定运算顺序,所以以后看到这样的题就不用再白费脑筋了,希望你听明白了,要是还有什么不明白,可以给我留言~~

先算左边的括号i=3,后遇到+后面有()优先级高故再算第二个扩号此时i=4,整个式子变为i+i+(++i),根据算优先级代入i值计算为8+(++i),最后8+5=13

研究这样的问题一点意义都没有.没有实际意义,各种编译器对他的处理方式都是不同的.建议放弃这种编程的方式.否则挨老板骂.