很多人可能已经熟练了使用i++或++i操作,但很少有人能很清楚的道出两者之间的区别,今天就细说一下:
话说++和-- 运算符是C语言中一个很细节的语法,除语法简练外,并没有其他好处。
前++是先加再取值,后++是先取值再加。
也就是i=3时,i++和++i的结果都是让i=4,但i++的值是3,而且++i的值是4。
一般来讲,单独使用i++和++i时,并没有多少区别,都等价于 i = i+1;
而 a = ++i,则等价于 i = i+1;a = i;
而 a = i++,则等价于 a = i; i = i++;
这么写相信已经明白了i++和++i之间的区别了吧。但是for循环里的表达式用i++ 和 ++i有区别吗?
答案是肯定的,从循环次数来说二者完全一样,但是使用i++比使用++i 所需要的辅助空间少,这个可以展开汇编看到,i++由于需要保存之前的值,需要一个辅助存储空间。而++i直接用和覆盖原空间即可详细解释如下:
由于i++的值还是i 的原来的值,所以要先保留原始值,这样理解:
j=i++解释为以下几条语句:
temp=i;
i=i+1;
j=temp;
而j=++i解释为:
i=i+1;
j=i;
如果只是简单类型没什么,但如果是类的话,temp的创造可是大代价的。这就是为什么很多人喜欢在循环中使用++i。
但在循环中,我们不关心其值,只关心其结果,所以是一样的。