i++和++i还是没有怎么弄清楚

img


这个算出来的结果是18,31,11,5想问问你们的思路,我还是没有弄清楚

不同编译器也不一样
同样代码在VS2010上输出为15,33,11,5
VS2010的结果比较容易理解,i++是先用i执行完表达式,然后再加1,所以p为三个5相加为15。然后i++三次,i变为8
然后执行三次++i,使得i变为11,然后三个11相加得到q值为33
===
你这个18和11还好理解,但31实在不好理解

连续加减的这种题,不同编译器会得到不同的值,所以还是不纠结的好,实际工作中也用不上,害人害己。

他们 两个都是 +1操作 但是他俩的返回值不一样

i=1
j=i++ j的值是 1

j=++i j的值是 2

多个++之间的和运算没有统一的定义,也就是说在不同编译环境下其结果有可能不同,可以看看这个朋友的文章
https://blog.csdn.net/a26013/article/details/121377828?ops_request_misc=&request_id=&biz_id=102&utm_term=++i&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-121377828.pc_edu_default&spm=1018.2226.3001.4449

++i性能优于i++,应为++i在用之前对i加1即可,而i++需要先吧原来的i+1存起来,然后用掉原来i以后用新的i(即原来的i+1)

加号在后表示先赋值,再自加。第一个式子,5+6+7等于18,i变为8,第二个式子,9+10+11等于30,不是31,i++,和++i都是自加,第一个是先把i得值赋值给等式前面,然后才自加,第二个是先自己增加再赋值给等式左边。

我和你输出一样我来解释一下我的理解

img

img


这里30+1的1哪来原理不太清楚,感觉是一个bug,因为下图中的运算也是可以这么解释,即2+3+4=9+1=10

img

这个代码毫无意义,因为这是未定义行为,不同编译器结果不一样,研究出来也没啥用,因为实际上不可能出现这种的代码。C语言标准压根没规定在一个表达式中多次更改变量的值计算顺序。

img

++i是先加然后返回自身
i++是先返回自身在自增

img

别纠结这种题了,一点意思都没有。

img

对于变量i来说都会在原来基础上加1的,重点区别于式子本身的值;
1、i++式子值为i原来的值,就是通俗说的“先赋值再加1”;
2、而++i式子值为i变化后的值,也就是“先加1后赋值”;
在for循环中,如果要表示递增,两种都可以。

求采纳
附解暑红包https://bbs.csdn.net/topics/607736237

img


第一行 i++,先运算后赋值,三个i分别是5,6,7.这行运算结束。i的值此时最终为8。 p=5+6+7
第二行 ++i,先赋值后运算,i的值分别为,9,10,11. 此时i的最终值为11. q=9+10+11
J定义了5,没有引用更改过值,J的最终值为5

http://t.csdn.cn/mO8Tn
你好看到你的问题,我想到了我以前做的博客,全部优先级的情况都考虑到了

单独一个程序段时无区别。其余情况下i++表示先使用i再加一,++i表示先加一再使用i