for循环i++与++i的区别是前加加是先执行循环体内的内容,再加加吗?
区别:
一、从代码执行的效果来看,它们并无任何区别,但是它们所生成的代码是有有所不同的。
1、i++:先引用后增加;
意思是:先在i所在的表达式中使用i的当前值,后让i加1。
2、++i:先增加后引用;
意思是:让i先加1,然后在i所在的表达式中使用i的新值。
二、i++由于是在使用当前值之后再+1,所以会需要一个临时变量来转储,而++则直接+1,不存在这样的问题。
举例代码:
int c=0;
for(int i=0;i<=50;i++)
c=c+i;
std::cout<<c;
1、首先在debug下编译:
i++情况
; 9 : int c;
; 10 : for(int i=0;i<=50;i++)
mov DWORD PTR _i$20035[ebp], 0
jmp SHORT $LN3@wmain
$LN2@wmain:
mov eax, DWORD PTR _i$20035[ebp]
add eax, 1
mov DWORD PTR _i$20035[ebp], eax
$LN3@wmain:
cmp DWORD PTR _i$20035[ebp], 50 ; 00000032H
jg SHORT $LN1@wmain
; 11 : c=c+i;
cmp BYTE PTR $T25811[ebp], 0
jne SHORT $LN6@wmain
push OFFSET $LN7@wmain
call __RTC_UninitUse
add esp, 4
2、++i情况
; 9 : int c;
; 10 : for(int i=0;i<=50;++i)
mov DWORD PTR _i$20035[ebp], 0
jmp SHORT $LN3@wmain
$LN2@wmain:
mov eax, DWORD PTR _i$20035[ebp]
add eax, 1
mov DWORD PTR _i$20035[ebp], eax
$LN3@wmain:
cmp DWORD PTR _i$20035[ebp], 50 ; 00000032H
jg SHORT $LN1@wmain
; 11 : c=c+i;
mp BYTE PTR $T25811[ebp], 0
jne SHORT $LN6@wmain
push OFFSET $LN7@wmain
call __RTC_UninitUse
add esp, 4
$LN6@wmain:
mov eax, DWORD PTR _c$[ebp]
add eax, DWORD PTR _i$20035[ebp]
mov BYTE PTR $T25811[ebp], 1
mov DWORD PTR _c$[ebp], eax
jmp SHORT $LN2@wmain
$LN1@wmain:
三、
++i确实省去了对内存操作的环节,直接add eax, 1,用++i真的能提高性能。
当然,上面是用debug版本,也就是说没有优化,那么在release优化的情况下。
举例:
1、i++优化
; 9 : int c;
; 10 : for(int i=0;i<=50;i++)
mov ecx, DWORD PTR _c$[esp+4]
xor eax, eax
$LL3@wmain:
; 11 : c=c+i;
add ecx, eax
inc eax
cmp eax, 50 ; 00000032H
jle SHORT $LL3@wmain
2、++i优化
; 9 : int c;
; 10 : for(int i=0;i<=50;++i)
mov ecx, DWORD PTR _c$[esp+4]
xor eax, eax
$LL3@wmain:
; 11 : c=c+i;
add ecx, eax
inc eax
cmp eax, 50 ; 00000032H
jle SHORT $LL3@wmain
结论:在没有编译器优化的情况下,++i更好。优化过后两者都一样,看起来似乎喜欢怎样写都无所谓了。
但是如果这里的i不是int而是迭代器,那么++在前和在后就会有所不同,使用++i将会有切实的更高的效率。虽然int情况下没多少区别,但为了语法上的统一,最好一律改用++i这种形式。
参考资料:
百度百科——for循环
i++和++i命令有什么区别?
i++和++i都是用于增加变量i的值的操作,但它们在使用和结果上存在明显的区别。详细解释:1. i++ 的解释:i++是一个后缀自增运算符。它的操作过程是,先返回变量i的当前值,然后将i的值增加1。这意味着在执行i++后,i的值会增加,但返回的是增加之前的值。这种后置的自增操作常常用在需要...
i++和++ i有什么不同吗?
输出结果:for(++i)循环:输出结果:3、print()输出函数内,不仅形式不同且输出结果也不同:i++和++i,二者在形式上明显不同,且输出结果也不同,输出值分别为1和2。如下图所示:for(i++)循环:输出结果:for(++i)循环:输出结果:参考资料:百度百科-for循环中关于i++与++i的阐释 ...
i++和++i命令有什么区别?
在循环或一般情况下,两者在效率上可能没有明显差异,但需要注意的是,它们可能会影响到变量i的生存周期和可能存在的写脏问题。因此,根据程序的特定需求,选择合适的运算符至关重要。总结来说,i++和++i的主要区别在于执行顺序、返回值以及作为左值的可用性,这在编程实践中需要根据上下文灵活运用。
c语言i++和++ i的区别是什么啊?
c语言 i++和++i的区别:1、i++式子值为i原来的值,就是通俗说的“先赋值再加1”;2、而++i式子值为i变化后的值,也就是“先加1后赋值”。而在for循环中,如果要表示递增,两种都可以。
i++和++i的区别
这在单一的操作中可能不会造成明显影响,但在复杂的表达式或循环中可能会导致显著的区别。例如,在for循环的条件判断中,这种区别可能会导致循环次数或行为的不同。总的来说,i++和++i虽然都表示自增操作,但在操作顺序和返回值的时机上存在差异。理解这些差异对于编写高效且准确的代码至关重要,特别是...
for循环i++与++i的区别是前加加是先执行循环体内的内容,再加加吗?
两个对于循环的次数都是没影响的,都是5次,都是当 i 小于5 不成立的时候跳出循环,但后面的 i 还是会递增1的。两者不同的地方在于++i 占用的空间比 i++ 要小,i++是多定义一个变量的。看看运算符重载可以知道是怎么回事。
i++和++i的区别
您好!很高兴为您解答。i++:先引用i的值,再将i自加1;++i:先将i自加1,再引用i的值。程序中return 0;表示主函数返回值为0,即程序结束,所以for循环在执行第一遍的时候已经结束了。望采纳~若您还有不解,欢迎追问~
i++与i+ i的区别是什么?
++i是还没用i之前就进行i=i+1的运算.类比可以得到i--,--i的意义 分析上题(1)第一问:i=1,j=10; 比较完后j减去1,但要注意的是++i跟6进行比较时,已经进行加一的运算,所以是2与6比较.以此类推,可得j=5,即j减5此,那么i要加5次,所以i=6,j=5 (2):第二问进行一次循环后j减去1,但...
++i和I++的区别
先加和后加的区别int i=0;int j=i++;\/\/后加,即i的值赋给j之后,i才加1,最后结果是j=0,i=1;i=0;\/\/i重新归0;int j=++i;\/\/前加,即i的值赋给j之前i已经加了1,最后结果是j=1,i=1;
C语言关于i++的问题,是在下次循环i加1,还是说遇到i时加1?
首先第一点, i++ 和 ++i 用法是不一样的;对于 i++ 先使用i的值,然后i再加一,而对于++i 是先让i的值加一再用i的值。i-- 和 --i 也是同样的道理,C语言书上有明确的讲解,主要看一下书上给的例子。其次,对于 for(j=0;j<4;j++){ printf("%2d ",*(*(p+i)+j)); ...