亚洲国产福利在线一二三观看_精品国产伦一区二区三区欲臀_国产a∨视频精品视频护士_精品八戒人妻少妇av

江蘇省高校計(jì)算機(jī)等級考試命題研究院 江蘇省高校計(jì)算機(jī)等級考試輔導(dǎo)
VB參數(shù)傳遞方式判別與解題應(yīng)用-

 

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

VB過程中使用的參數(shù)分為實(shí)參和形參,簡單的講,在過程定義中給定的參數(shù)是形參,而在過程調(diào)用語句中給定的參數(shù)是實(shí)參。當(dāng)調(diào)用一個有參數(shù)的過程時,形參和實(shí)參逐一匹配傳遞,根據(jù)傳遞方式不同,可分為按值和按地址兩種。對參數(shù)傳遞方式的正確判別是過程學(xué)習(xí)中的一個難點(diǎn),也是等級考試中的一個考點(diǎn)。

一、            按值與按地址方式的內(nèi)涵

       按值傳遞參數(shù),實(shí)質(zhì)上是將實(shí)參的值復(fù)制一份給形參,因此形參獲得的是實(shí)參的副本,當(dāng)過程執(zhí)行中對形參進(jìn)行改變,并不會影響實(shí)參本身;按地址傳遞參數(shù),實(shí)質(zhì)上是將實(shí)參變量的地址傳遞給形參,因此形參與實(shí)參將指向同一內(nèi)存單元,當(dāng)過程執(zhí)行中形參發(fā)生改變時,對應(yīng)實(shí)參也將跟著改變。

二、            參數(shù)傳遞方式判別方法

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

1.       形參是否為數(shù)組或者控件

2.       形參前是否有ByVal修飾

3.       對應(yīng)實(shí)參是否為表達(dá)式或者值

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

過程參數(shù)傳遞方式判別

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

若參數(shù)按地址傳遞,則VB要求實(shí)參的數(shù)據(jù)類型與形參的數(shù)據(jù)類型完全一致;若參數(shù)按值傳遞,則實(shí)參數(shù)據(jù)類型不要求與形參完全一致,但是必須能夠由VB默認(rèn)轉(zhuǎn)化。

四、解題應(yīng)用

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

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

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

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

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

分析:

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

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

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

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

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

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

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

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

調(diào)用由語句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選項(xiàng),實(shí)參分別為(X)和X*1,均為表達(dá)式,因此A、B選項(xiàng)中的實(shí)參將按照值傳遞;對于D選項(xiàng),實(shí)參X未用括號引導(dǎo),此時不可加Call,因此語句正確,同時,根據(jù)判別流程圖,實(shí)參X與形參Y必按地址傳遞。分析至此,對于該題為單選題,已經(jīng)可以斷定答案是D。

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

(三)  閱讀程序?qū)懗鲞\(yùn)行結(jié)果:

       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

分析:

根據(jù)判別流程圖知,第一、二參數(shù)按地址傳遞,第三參數(shù)按值傳遞。因此第一、二形參與對應(yīng)實(shí)參指向同一內(nèi)存單元,而第三形參與對應(yīng)實(shí)參值相同,但卻指向不同內(nèi)存單元。因此,可以作出如下參數(shù)傳遞與過程調(diào)用示意圖。

實(shí)參形參匹配圖

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

經(jīng)分析,最后答案為:

6    4    10

6    4    3