35个回答
展开全部
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++ 的当前值。
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++ 的当前值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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的值。
和
++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的值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单的来说,++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语言中其实是一个很细节的语法,除了表达简练外,真的没有什么其它的好处了。
和
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语言中其实是一个很细节的语法,除了表达简练外,真的没有什么其它的好处了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对于整个表达式没有区别,但是i的值大液做有区别,++i,是i会自增1,而i++,i的值就不会变,你只要记住i在前面的,i的值就不会变,i在++后面,i的值就会加1,
我以前看是滚衡学C的时候,也没埋耐有分清楚,后来就是用这种方法分清楚的
我以前看是滚衡学C的时候,也没埋耐有分清楚,后来就是用这种方法分清楚的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
希望可以帮到你!
纯手打~
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;
希望可以帮到你!
纯手打~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询