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

例如a=++1b=j++... 例如

a=++1
b=j++
展开
 我来答
小周喜欢熬夜
高粉答主

2021-04-06 · 每个回答都超有意思的
知道大有可为答主
回答量:8789
采纳率:72%
帮助的人:206万
展开全部
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++ 的当前值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
戏君昊卑西
2019-07-17 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.1万
采纳率:33%
帮助的人:804万
展开全部
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的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
卿才英委鸥
2019-02-19 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:30%
帮助的人:886万
展开全部
简单的来说,++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语言中其实是一个很细节的语法,除了表达简练外,真的没有什么其它的好处了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
滑卓然春寒
2019-12-13 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:30%
帮助的人:662万
展开全部
对于整个表达式没有区别,但是i的值大液做有区别,++i,是i会自增1,而i++,i的值就不会变,你只要记住i在前面的,i的值就不会变,i在++后面,i的值就会加1,
我以前看是滚衡学C的时候,也没埋耐有分清楚,后来就是用这种方法分清楚的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
简玉英员环
2019-11-20 · TA获得超过3.7万个赞
知道小有建树答主
回答量:1.4万
采纳率:26%
帮助的人:860万
展开全部
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;
希望可以帮到你!
纯手打~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式