![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
圖解法解閱讀程序?qū)懡Y(jié)果題一則 |
圖解法解閱讀程序?qū)懡Y(jié)果題一則——順答yiyibushe提問曹蘇群 http://caosuqun.bokee.com
題目(By yiyibushe): Dim x As Integer, y As Integer Private Sub form_click() Dim a As Integer, b As Integer a = 5: b = 3 Call sub1(a, b) Print x, y End Sub
Private Sub sub1(ByVal m As Integer, n As Integer) Dim y As Integer x = m + n: y = m - n m = fun1(x, y) n = fun1(y, x) End Sub
Private Function fun1(a As Integer, b As Integer) x = a + b: y = a - b Print x, y fun1 = x + y End Function
解答: 本題主要考察過程調(diào)用、參數(shù)傳遞以及變量作用域等知識(shí)點(diǎn),對(duì)于此類題型,建議使用圖解法來解。 由第一句:Dim x As Integer, y As Integer 知,x和y為模塊變量,可以被這三個(gè)過程所訪問;sub1過程中,有:Dim y As Integer,此處y為過程級(jí)變量,因此,在sub1過程中,訪問的是過程級(jí)變量y而非模塊變量y;而在fun1中訪問的y是模塊變量y而非過程級(jí)變量y! 為此,我們可以圖解如下: 1 將模塊變量用單列的圖來表示,以表示可以為該模塊中各個(gè)過程所訪問,而將過程級(jí)變量圖示限定在對(duì)應(yīng)過程中。 2 留意參數(shù)傳遞方式,若按地址傳遞,則形參和實(shí)參圖示時(shí)指向同一內(nèi)存單元,若按值傳遞,則形參和實(shí)參圖示時(shí)各有各的內(nèi)存單元,僅僅復(fù)制值而已。 給出如下圖解圖示:
圖中藍(lán)色線條說明該內(nèi)存單元均指向sub1中過程級(jí)變量y;綠色線條說明該內(nèi)存單元均指向模塊變量x;紅色塊表示第一次輸出結(jié)果,即第一次調(diào)用fun1執(zhí)行Print x, y;黃色塊表示第二次輸出結(jié)果,即第二次調(diào)用fun1執(zhí)行Print x, y;最后一次輸出結(jié)果,即form_click中執(zhí)行Print x, y恰好與黃色塊一樣。 請(qǐng)按照?qǐng)?zhí)行流程,對(duì)照這個(gè)圖,仔細(xì)推敲 |