问题描述:
看了好多baidu知道,说的好深奥,有米有简单点的解释的,最好是通俗易懂
i++所使用或者说i++参与的运算是什么?可以用式子写出来?
问题解答:
a=i++;相当于a=i;i=i+1;
a=++i;相当于i=i+1;a=i;
只为了方便理解,并不是等价的,因为运算效率不同。
i++
保存i的值作为结果,然后给i + 1。
++i
单纯给i + 1。
i原来是1的话 i++的结果是1 但是i本身会变成2
++i 结果是2 i本身也会变成2
C++中避免组合使用自加自减,规范有漏洞。
这个啊,以前我也分得不清,特别是让你算p++ ++p之类的啊就头痛,但后来发现只要把运算符的优先级搞清楚了就简单了
比如
int a=5;
那么a++还是等于5 而a的值却是6了,慢慢来,优先级!!!!!
我可以再线和你交谈的
++i和i++就是不同的
++i是在使用i之前把i的值先加1;
而i++是在使用i之后把i的值加1
--i和i--和上面的差不多的
--i是在使用i之前把i的值先减1,
而i--是在使用i之后把i的值减1
我举一个例子吧
#include<stdio.h>
void main()
{
int i=3;
printf("%d",++i);
}
运行结果就是4
若改为
#include<stdio.h>
void main()
{
int i=3;
printf("%d",i++);
}
则输出结果是3
懂了吗
--i 和i-- 一样的。
最简单的记忆原则是:
i++ : i先参与运算,运算完成后,i自身加1
++i : i先自身加1,然后再参与运算
eg1:
int i = 2;
int j = i++;
程序执行完后:i是3 j是2
eg2:
int i = 2;
int j = ++i;
程序执行完后:i是3 j是3
至于更为复杂的各种其他形式,都可参照以上两条原则,只不过要再考虑表达式从左到右还是从右至左执行等等,左结合右结合等知识在书本上都可以找到,至于 i+++++j 这样变态的表示方法只是笔试面试时候才会有,平时软件开发是不会用的,开发过程中,代码是要给别人看的,越简单明了越好,不然领导会骂人的,顺便说一下 i+++++j 是不正确的表示,程序员意图可能是:(i++) + (++j) 这也符合编译器的语法分析和词法分析,但是最终是编译通不过的,有兴趣可以看看编译原理。
EASY!
void main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);
}
如按照从右至左的顺序求值。例5.2的运行结果应为:
8
7
7
8
如对printf语句中的++i,--i,i++,i--从左至右求值,结果应为:
9
8
8
9