1. <small id="kntrr"><delect id="kntrr"></delect></small>
    2. <sub id="kntrr"></sub>
        1. <form id="kntrr"><listing id="kntrr"></listing></form>
            江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
            VB參數傳遞方式判別與解題應用-

             

              作者:曹蘇群:http://caosuqun.bokee.com

            VB過程中使用的參數分為實參和形參,簡單的講,在過程定義中給定的參數是形參,而在過程調用語句中給定的參數是實參。當調用一個有參數的過程時,形參和實參逐一匹配傳遞,根據傳遞方式不同,可分為按值和按地址兩種。對參數傳遞方式的正確判別是過程學習中的一個難點,也是等級考試中的一個考點。

            一、            按值與按地址方式的內涵

                   按值傳遞參數,實質上是將實參的值復制一份給形參,因此形參獲得的是實參的副本,當過程執行中對形參進行改變,并不會影響實參本身;按地址傳遞參數,實質上是將實參變量的地址傳遞給形參,因此形參與實參將指向同一內存單元,當過程執行中形參發生改變時,對應實參也將跟著改變。

            二、            參數傳遞方式判別方法

                   判斷參數傳遞方式,不能單純的看過程定義中形參前的修飾限定詞有無ByVal。參數傳遞到底采用何種方式,不僅取決于過程定義,還取決于過程調用,即與對應實參的具體形式也有很大關系。因此,應該從以下三個方面綜合考慮:

            1.       形參是否為數組或者控件

            2.       形參前是否有ByVal修飾

            3.       對應實參是否為表達式或者值

            具體判別方法,請見如下判別流程圖。

            過程參數傳遞方式判別

            三、不同傳遞方式對參數類型的要求

            若參數按地址傳遞,則VB要求實參的數據類型與形參的數據類型完全一致;若參數按值傳遞,則實參數據類型不要求與形參完全一致,但是必須能夠由VB默認轉化。

            四、解題應用

            (一)  以江蘇省計算機等級考試2001年春季的一道考題為例:

            在應用程序中用“Private Function Fun(X As Integer, Y As Single)”定義了函數Fun. 調用函數Fun的過程中的變量I,J均定義為 Integer,能正確引用函數Fun的是____

            Fun(I,J)                           Call Fun(I,3.65)

            Fun(3.14,234)                  Fun(“245”, “231.5”)

            A.①③          B.②③④                     C.①②③                     D.①②③④

            分析:

            1.       根據判別流程圖,對每個引用做如下判斷:

            對于①Fun(I,J),實參I與形參X匹配,由于形參X不是數組并且無ByVal修飾,而實參I為變量,不是值或表達式,因此該參數將按照地址傳遞;同理,可以推斷實參J與形參Y也將按照地址傳遞。根據VB要求,按照地址傳遞的實參和形參數據類型必須完全一致,而根據題意,JInteger,YSingle,因此①不正確;

            對于②Call Fun(I,3.65),IX按地址傳遞;而實參3.65為值,與形參Y匹配時,將按值傳遞,因此②正確;

            對于③Fun(3.14,234),雖然實參3.14對應的形參XInteger,實參234對應的形參YSingle,但由于它們都是按照值傳遞,因此3.14將轉化為3,而234可以直接賦給Y,因此③正確;

            對于④Fun(“245”, “231.5”),由于實參245”231.5”均為字符串值,因此其與對應形參X、Y將按照值傳遞,而數字字符串是可以轉化為數值類型的,因此④正確。

            綜上所述,正確答案為B。

            2.       對于該題,由于要求是“能正確引用函數Fun的是”,因此,③④雖帶括號,并且無Call引導,但卻可以通過諸如:Print Fun(3.14,234)加以引用。若改為:“能正確調用函數Fun的語句是”,則此時③④不可選,只能選②。

            (二)  以江蘇省計算機等級考試2002年春季的一道考題為例:

            調用由語句Private Sub Convent(Y As Integer)定義的Sub過程時,以下不是按值傳遞的語句____。

            A.Call Convent((X))                   B.Call Convent(X*1)

            C.Convent(X)                             D.Convent X

            分析:

            1.       對于A、B選項,實參分別為(X)和X*1,均為表達式,因此A、B選項中的實參將按照值傳遞;對于D選項,實參X未用括號引導,此時不可加Call,因此語句正確,同時,根據判別流程圖,實參X與形參Y必按地址傳遞。分析至此,對于該題為單選題,已經可以斷定答案是D。

            2.       現在考慮C選項語句Convent(X)帶括號,但卻無Call引導,因此直覺上似乎不能正確執行。但若我們在VB代碼編輯器中輸入該句,回車后,該語句自動調整為:Convent (X),注意此時Convent(X)之間有一個空格,因此該句中的括號是用于X,而不是用于Convent,所以盡管無Call引導但其卻能夠執行,此時實參為(X),因此參數將按值傳遞。所以對于Call Convent(X)Convent(X),雖然都能執行,并非是由于Convent(X)前可以省略Call,而在于它們的實參分別是X(X),其傳遞參數的方式自然就不同。

            (三)  閱讀程序寫出運行結果:

                   Private Sub Form_Click()

                       Dim x As Integer, y As Integer, z As Integer

                       x = 1: y = 2: z = 3

                       Call sub1(x, y, y)

                    Print x,y,z

            End Sub

            Private Sub sub1(x As Integer, y As Integer, ByVal z As Integer)

            Dim I As Integer

                       x = 3 * z: y = 2 * z: z = x + y

                       Print x, y, z

            End Sub

            分析:

            根據判別流程圖知,第一、二參數按地址傳遞,第三參數按值傳遞。因此第一、二形參與對應實參指向同一內存單元,而第三形參與對應實參值相同,但卻指向不同內存單元。因此,可以作出如下參數傳遞與過程調用示意圖。

            實參形參匹配圖

            雖然實參和形參均為x、y、z,但是請注意區分,它們具有不同的作用域。

            經分析,最后答案為:

            6    4    10

            6    4    3

            国产在线精品一区二区三区不卡_亚洲第一极品精品无码_永久免费无码网站在线观看_亚洲av综合日韩