C语言中++i 和i++有啥区别啊?

例如

a=++1
b=j++

第1个回答  2021-04-06
i++;++i;就C语言代码来看,i++ 和 ++i 都只有一行,看起来似乎二者的执行效率一样了?其实不是的,在学习C语言时,教材和老师一般都会强调 i++ 和 ++i 的区别,例如下面这段C语言代码:
int i , j, k;i = 0;j = i++;i = 0;k = ++i;这段C语言代码执行后,j 和 k 的值并不相等:j 等于 0,k 等于 1。既然执行结果有差异,那么执行效率很有可能也是有差异的,事实的确如此。查看上述C语言代码对应的汇编代码,如下:

C语言代码对应的汇编代码
我使用的编译器为 gcc version 4.8.4。
可见,j=i++; 计算机需要 4 条指令来解释,比执行 k=++i; 多出了一条指令。多出的一条指令为:在对 i 执行自加操作之前,先保存 i 的当前值留作稍后使用(赋值为j)。
这样看来,似乎 ++i 的执行效率比 i++ 高一些?
那为了写出效率更高的C语言程序,以后是不是应该尽量使用 ++i,而不是 i++ 了呢?例如下面这样的C语言代码:
for(i=0; i<10; i++);for(i=0; i<10; ++i);是不是上面那行C语言代码的执行效率低于下面的呢?只能说理论如此,实际上,现代C语言编译器已经足够聪明,它会根据上下文编译C语言代码。

编译器会根据上下文编译C语言代码
应该明白,i++ 和 ++i 的效率差异主要来自于处理 i++ 时,需要先保存 i 的当前值留作稍后使用。如果之后没有人使用 i 的当前值,也就是说没有C语言代码读取 i++ 的值,编译器实在没有必要保存 i 的当前值了,因此就会将这一步优化掉。
为了便于分析,我们编写下面这样的C语言代码:
int i = 0;
i++;
++i;
与上面的例子相比,区别在于在执行 i++ 时,没有人关心 i 的当前值了。查看这段C语言代码对应的汇编代码:

对应的汇编代码
显然,i++ 和 ++i 对应的指令是一模一样的,不再有执行效率上的差异。
小结
C语言中的 i++ 和 ++i 是有区别的,这就有可能带来效率上的差异。如果有代码关心 i++ 执行时的 i 当前值,程序在对 i 进行自加操作时,将不得不先保存 i 的当前值,而 ++i 就无需保存当前值,这就会带来效率上的差异。如果没人关心 i++ 的当前值。
第2个回答  2019-07-17
i++

++i要是单独占一行的话,是没有区别的,都是将i的值加1.但是如果被嵌套在其他语句中是有区别的。
例如:i=
1;
if(i
++)
{
printf("%d",i)
;
//
这里仍然是i=1
}
//执行结束后
对i+1,这里i=2
if
(++i)
{
printf("%d",i)
//这里i=2
}
也就是i++,是使用i的值以后,再对i+1;而,++i是先进行i+1,然后再使用i的值。
第3个回答  2019-02-19
简单的来说,++i

i++,在单独使用时,就是
i=i+1。

a
=
++i,相当于
i=i+1;
a
=
i;

a
=
i++,相当于
a
=
i;
i=i+1;
如果实在搞不明白++
--怎么回事,那也没关系。
因为a=++i完全可以写成
i++;
a=i。
a=i++完全可以写成
a=i;
i++。
而且,这也是一种好的程序风格:++
--
语句如非特殊需要,请慎用。
一直以来,++
--语法浪费了太多人的时间。说句实在话,++
--
在C语言中其实是一个很细节的语法,除了表达简练外,真的没有什么其它的好处了。
第4个回答  2019-12-13
对于整个表达式没有区别,但是i的值有区别,++i,是i会自增1,而i++,i的值就不会变,你只要记住i在前面的,i的值就不会变,i在++后面,i的值就会加1,
我以前看是学C的时候,也没有分清楚,后来就是用这种方法分清楚的
第5个回答  2019-11-20
i++和i--,首先i必须是整数类型!
i++
:
整个式子的值是i,譬如
i
=
3;
int
p
=
i++;
这里面p的结果是3,计算后,
i的值要加1
,此时i的值为4;
同理对i--;
++i:
整个式子的值是i+1,譬如
i
=
3;
int
p
=++i;
这里面p的结果是4,计算后,
i的值要加1
,此时i的值为4;
同理对--i;
希望可以帮到你!
纯手打~

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网