今天在調(diào)式代碼時(shí)發(fā)現(xiàn)了一個(gè)問題。
for (int i=0;i<5 ;i++){}與for (int i=0;i<5 ;++i){}
是一樣的。
在書本上,++i是先自加,i++是后自加。
int i = 0;
int x = i++;
很明顯x得到的值是0,然后i自加的值是1。
int i = 0;
int x = ++i;
這一段中x的值為1。
問題處在哪里呢?
原來是for循環(huán)的執(zhí)行過程上有些不同。
例如:for(exp 1;exp 2; exp 3){ exp 4;}
它的過程是這樣的,首先循環(huán)是執(zhí)行exp 1,完成它的初始化,再判斷exp 2是否為真,若為真,則執(zhí)行循環(huán)體exp 4,執(zhí)行完后再回到exp 3,計(jì)算并修改循環(huán)條件,第一輪循環(huán)就結(jié)束了。第二輪的開始是從exp 2開始,若為真,繼續(xù)執(zhí)行exp 4,然后回到exp 3。當(dāng)再次進(jìn)入exp 2時(shí),表達(dá)式為false,跳出循環(huán)體。
問題就是出在這里,exp 3相當(dāng)與一個(gè)計(jì)數(shù)器的工作,當(dāng)執(zhí)行完畢后exp 3無論是++i還是i++,其結(jié)果都是一樣的。
posted on 2007-10-30 15:59
湘江夜游神 閱讀(133)
評(píng)論(0) 編輯 收藏