|
2#

樓主 |
發(fā)表于 2012-9-23 02:29:29
|
只看該作者
本帖最后由 roych 于 2012-9-23 21:27 編輯
問題3:
取消公共變量之后,實際上嵌套函數(shù)已經(jīng)發(fā)生很大變化的了。具體過程是:
第1次傳址過程,沒什么好說的,x=a+1=2,y=b+1=3,a=x+y=5
第2次傳址過程,x=x+1=2+1=3,y=y+1=3+1=4,a=x+y=7。
從上面來看,實際上第2次傳址過程并沒有把a=5傳遞給fun1,而是繼續(xù)進行循環(huán)內(nèi)運算的(這和定義公共變量是完全不同的),換句話說,fun1(a,b)=a+y=7+4=11(這時候x=3,y=4)。
因此:fun1(fun1(a,b),b)=fun1(11,4),這樣一來,那么顯然循環(huán)就得執(zhí)行4次了。
第1次:x=11+1=12,y=4+1=5,a=12+5=17
第2次:x=12+1=13,y=5+1=6,a=13+6=19
第3次:x=13+1=14,y=6+1=7,a=12+5=21
第4次:x=14+1=15,y=7+1=8,a=13+6=23
那么fun1(fun1(a,b),b)=fun1(11,4)=a+y=23+8=31。
因此得到的結(jié)果,顯然是31,3,8【為什么是3,而不是15?以x才是15,a一直停留在嵌套內(nèi)的循環(huán)里,即x=x+1+1=3。也就是說,嵌套前a已經(jīng)定型了~~】
*************************************************************************************************
問題4:
事實上這和之前的解釋沒太大不同。過程如下:
第1次:x=a+1=2,y=b+1=3,a=x+y=5
第2次:x=x+1=2+1=3,y=y+1=3+1=4,a=x+y=7 fun1(a,b)=7+4=11。
而我們前面說過,傳值過程,傳遞完之后,那個值是不會發(fā)生變化的。因此,外循環(huán)也只是循環(huán)2次。即:fun1(fun1(a,b),b)=fun1(11,2)
第1次:x=11+1=12,y=2+1=3,a=x+y=15
第2次:x=12+1=13,y=3+1=4,a=x+y=17
fun1(fun1(a,b),b)=fun1(11,2)=a+y=17+4=21。
b肯定是不變的2了,那么取消公共變量后的a呢?
不用猜了,取消公共變量后,傳值完之后,變量便回復到初始值了,也就是a=1。會感到意外嗎?
啰啰嗦嗦地講這么多,也不知道會不會有人覺得,這些代碼到底有沒有實際用途呢?事實上,曾經(jīng)為一個同事寫過一段ADO的代碼,他問了一個很專業(yè)的問題,為什么在Update記錄集后,非要加上一句a=0呢?如果他了解傳值過程和傳址過程就很清楚原因了:加上這句后才能初始化數(shù)據(jù)啊。 |
|