for循环是先执行循环语句还是先判断?

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-01
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循环

是的
for (i=0;i<10;i++)
循环变量 i 初值;
判断条件;
循环变量值改变
{循环体}

先判断,例如C中:
for(int i = 0;i<Array.length;i++)
{
//循环语句
}
循环中先对i初始化,再判断i是否小于Array.length,如果符合条件就执行循环语句,执行循环语句后执行i++,然后再判断,知道不符合条件退出。

是先判断条件再执行。如果初值不满足条件,一次都不执行。
例如
for
(i
=
100;
i
<
100;
i++)
printf("why?");
是没有输出的。

先判断 再循环 后更改值

for(变量赋值;变量判断;变量累加或累减)
例如for(int i=1;i<10;i++) 先判断i是否小于10,如果i小于10,执行i++,然后又判断i是否小于10,直到i等于10跳出循环

for (语句1;语句2;语句3)
{循环体}
那么执行顺序是 1 循环体 3 2(如果满足) 循环体 3 2 循环体 3 2 ……直到语句2不成立就跳出循环了

  • for语句的执行过程
    答:for语句的一般形式为:for(单次表达式;条件表达式;末尾循环体){中间循环体;}。for循环执行时,会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执行完中间循环体后接着执行末尾循环体 。在执行完末尾循环体后对条件表达式再次进行判断,若条件还成立,则继续重复中间循环体,当条件不成立时...
  • for 语句执行顺序
    答:for语句执行过程如下:①先对表达式1赋初值;②判别表达式2是否满足给定条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行表达式3,进入第二次循环,再判别表达式2……;否则判断表达式2的值为假,不满足条件,就终止for循环,执行循环体外语句。for语句语法流程如下图所示:例题:include main...
  • VB中For Next 循环是 先判断后执行,还是先执行后判断
    答:(1)for...next 语句是先判断后执行的循环语句,是根据终值和循环变量的值的大小来决定是否执行下一次循环的,如for i=1 to 3 step 1,变量递增执行3次,当i大于终值3时,则不再执行循环。递减原理相同 (2)do...loop语句分为前测型和后测型:a.前测型do while...loop 和do until......
  • for循环执行顺序
    答:for循环是一种在编程中常用的循环结构,用于对一个可迭代对象中的元素进行遍历和处理。for循环的执行过程是:先从可迭代对象中获取第一个元素,然后执行循环体语句对其进行操作或处理,接着获取下一个元素,再次执行循环体语句,如此循环,直到可迭代对象中的所有元素都被处理完毕。在Python中,for循环的...
  • for循环执行顺序是什么?
    答:3、内层循环体执行。4、内层循环变量累加,回到2执行,直到不满足内层条件。5、外层循环变量累加,回到1执行,直到不满足外层循环条件,彻底退出循环。语句最简形式为:for( ; ; )一般形式为:for(单次表达式;条件表达式;末尾循环体){中间循环体;} 指针最优,单目运算优于双目运算。如正负号。先...
  • c语言for语句循环顺序是怎么样的
    答:给你举个例子 for(i = 0; i < 10; i++){ };i = 0 在执行循环之前执行,也就是只有第一次循环回执行这条语句 i < 10 进入循环的条件,在进入循环之前判断,每次循环都会判断 i++ 在循环执行完毕后所执行的语句,这条语句执行完毕,就进入下次循环判定,也就是判定i < 10,为假时跳到...
  • c++中的for循环 是当型循环还是直型循环??
    答:直到循环是先执行循环内的语句,再进行判断,直到条件不成立时退出循环。而当型循环则刚好相反,先进行判断,再执行循环内的语句,直到条件不成立时退出循环。for循环是先判断条件,条件符合才执行语句,所以是当型循环
  • do-while循环的与for循环,while循环的区别是什么
    答:三个循环语句的差别如下:1、初始化变量。for循环当中定义的初始化变量,只有自己才能用;while和do-while循环,初始化变量本来就在外面,所以外面也照样可以使用(定义在循环体里 的局部变量,在栈内运行完释放,并不保存)。2、执行次数。for循环和while循环是【先判断后执行】,但是do-while循环是【...
  • for循环的用法是什么?
    答:上面是一种情况。另一种情况 程序执行时,先执行表达式1 若表达式2为假时,循环直接结束。执行for循环下面的语句。当省略表达式2时。可能造成无限循环,也就是死循环。举个例子:for(i=0;;i++){ printf("这是一个没有表达式2的for循环!\n");} 调试运行之后,它会无限次执行for语句。也就是说...
  • C/C++中 do while 和while 和FOR的比较有什么不同?
    答:这三个都是循环语句,while和for循环是要先判断条件,当条件成立时(即判断语句为非0时),才执行循环语句,而do-while语句是先执行循环然后再判断条件是否成立。所以while和for循环有可能循环一次也不执行(当他们第一次判断循环条件就不成立时,循环就一次也不会执行),而do-while至少会执行一次。