技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 22847
|
2#

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