int i=5, j=5;
int p=(i++)+(i++)+(i++);
int q=(++j)+(++j)+(++j);
printf("%d %d", p, q);
上面这段代码,在vc,dev c++下结果是15 22,tc下是15 24
计算结果取决于各编译器进栈出栈的顺序。
这类代码移植性很差,需要尽量避免,也没有任何意义分析这样的运算顺序。
楼上的解释很好,不过呢……实际用起来没什么区别,都是随机结果,取决于编译器,因为楼上的解释只在++(或者--)连续出现小于3次的时候适用,当++连续出现3次以上,就取决于编译器了。
1 加入括号后,括号内的一律先运算
那么 (i++)+(i++)+(i++)和(++i)+(++i)+(++i) 就是一样的
2 q=(++j)+(++j)+(++j)
根据括号优先级最高,所以它计算的q的结果和 q=(j+1)+(j+1)+(j+1) 的结果一样是24
要看编译器,赞LS的精神
说得都不错,但我建议写程序时没必要这么写吧,把它分开写不就没事了
在C语言中(i++)+(i++)+(i++)和(++i)+(++i)+(++i) 有什么区别啊?急救~
1
加入括号后,括号内的一律先运算
那么
(i++)+(i++)+(i++)和(++i)+(++i)+(++i)
就是一样的
2
q=(++j)+(++j)+(++j)
根据括号优先级最高,所以它计算的q的结果和
q=(j+1)+(j+1)+(j+1)
的结果一样是24
在C语言中,i+=1的原型就是i=i+1,所以i+=1相当于就是i=i+1的简写。不管C语言结构、算法是否复杂基本上都能看到这样的简写,但是否要简写还是看个人的习惯。
扩展资料:
C语言中的其他简写形式:
1、a+=b →a=a+b
2、a-=b →a=a-b 3、a*=b →a=a*b
4、a/=b →a=a/b 5、a%=b →a=a MOD b 即a/b的余数
6、a&=b →a=a &b 按位与
7、a^=b →a=a EOR b 按位异或
8、a||=b →a=a || b 按位或
#18572948025#
急! C语言中,i++和++i的区别是什么 ? - ******
#成肾# i++和++i的区别一个是变量的值先进行运算再对i进行加1,后者是先把变量i加1再把新的i值进行运算. 比如初始i=3,,现在有n=i++;则n的值为3,而这个语句执行后i=4若n=++i则,则运算后n=i=4
#18572948025#
在C语言中I++与++I的区别? ******
#成肾# 例如 i=5; printf("%d",i++); 你既然知道i++是先取值那么,printf这个函数当然取的是i=5的时候的值咯. 相反的 i=5; printf("%d",++i) 则是先自加后,再把i的值取出来,printf所取的i值当然就是6咯
#18572948025#
++之惑:C语言中++i和i++的区别? ******
#成肾# ++i是现加一再用而i++是现用再加一;如i=2;j=++i,k=i+;则j=3,k=2;相同的是经过变化后i都为三;(我们也正在学这呵呵)
#18572948025#
计算机C语言中,关于i++,和++i怎么用啊??我总是搞不明白 - ******
#成肾# 语言里是这样的: 1.后置运算:k++表示先运算,后自加. 意思是遇到k++了,我先把当前的k的值拿来参加运算,后面再去管它的自加. 那么,【“后面”后到什么程度呢?要后到当前的语句执行完,即遇到分号;表示 语句执行完了,所以k才自加1.】 如:int k=5,b=0; b=k++;的意思就是,先算b=k(即b=5),遇到分号;表示语句结束,k才自加1,即k变为6.2.前置运算:++k表示先自加,后运算 这个意思就是遇到++k了,先把k的值加了1,再往后执行别的. 如:int k=5,b=0; b=++k;的意思就是,先把k自加1,即k为6,再算b=k(即b=6).掌握好这两点,k--和--k也是一样的道理.
#18572948025#
C语言关于i++与++i - ******
#成肾# 压栈顺序和求值顺序是2个概念, C语言没有规定压栈顺序, C语言也没有规定参数的求值顺序, 编译器自己发挥. 但是规定了在实际调用前存在一个序列点. 具体到这个问题, 参数在压栈前被求值, 但是具体先求 哪个参数就不一定了, 可以正着求可以反着求也可以跳着 求, 而且因为逗号之间不存在序列点, 那么4个i是在什么 时刻自加也是不一定的, C语言能保证的只是当函数被实 际调用时, 4个i的所有自加运算完成. 这也符合C99"在相邻序列点之间的同一对象最多只能被修 改1次"之规定. 所以你的问题无统一解,以后要避免这种摸棱两可的写法. ps: 这里指的副作用就是i的自加动作.
#18572948025#
i++和++i的区别 - ******
#成肾# 简单地说,都是I自加1.区别是,I++是执行完后面的语句才加1;而++I就先做I+1才执行后面的语句一直以来,++ --语法浪费了太多人的时间.说句实在话,++ -- 在C语言中其实是一个很细节的语法,除了表达简练外,真的没有什么其它的好处...
#18572948025#
请问C语言中i++和++i有什么不同?呀详细通俗的解释,不要教材上的原话.学了C语言可以开发出像QQ这样的... ******
#成肾# 这里我们先讲 i++ 不要记教材上的东西..始终记得,++在后,比如在赋值过程中 j = i++; 那么执行语句的流程是j = i; i = i + 1;也就是说先使用再自加. 如果 ++ 在 前,那么过程是相反的.那就是先自加再使用.比如 j = ++i; 先自加是 i=i+1; ...
#18572948025#
C语言中i++与++i的区别 ******
#成肾# i++ 是先使用变量的值,后加1; ++i 是先自加1,然后使用变量的值. 本例中: str[j++]=str[i]; 相当于:先赋值,后自加. str[j]=str[i]; j++;
#18572948025#
C语言中++i与i++的区别 - ******
#成肾# 一直以来,++ --语法浪费了太多人的时间.说句实在话,++ -- 在C语言中其实是一个很细节的语法,除了表达简练外,真的没有什么其它的好处了. 由于中国的C语言教程长期以来被谭浩强主宰,而谭又错误的把++ --作为一个C语言重点来教,...
#18572948025#
c语言中i++,++i的运算 - ******
#成肾# 考点一:++i和i++的区别 ++i先进行自增再参加运算 i++先参加运算,再自增 考点二: 整数相除取整 分解掉 Y = Y+ Z/(X+1); Z = Z-1; y = 2+3/2 = 2+1 = 3 所以y等于3 你前面肯定要声明类型的,不然编译通不过,如果是题目的话,那就是题目出的不完善