(河北省香河縣第三中學(xué)065400)
VB調(diào)用過程中的參數(shù)傳遞解析
劉新穎
(河北省香河縣第三中學(xué)065400)
VB編程中參數(shù)過程的調(diào)用是重點(diǎn)和難點(diǎn),特別是調(diào)用過程中的參數(shù)傳遞,學(xué)生難于理解和掌握,本文結(jié)合實(shí)例,深入分析參數(shù)傳遞中的兩種方式,并對兩種方式進(jìn)行舉例說明,對于學(xué)生理解和掌握參數(shù)傳遞的過程十分重要。
過程調(diào)用參數(shù)傳遞
使用Visual Basic(簡稱VB)編寫程序,除了需要進(jìn)行界面設(shè)計(jì),還需要大量的程序代碼的編寫,為了便于程序的調(diào)試與維護(hù)、提高代碼的利用率,就需要將程序分為若干模塊和子模塊,并采用過程的調(diào)用來實(shí)現(xiàn)。在VB教學(xué)工作中,過程調(diào)用中的參數(shù)傳遞往往是學(xué)生最難理解和掌握的知識點(diǎn),本文結(jié)合實(shí)例對參數(shù)傳遞的兩種方式進(jìn)行深入的分析和說明,方便學(xué)生的理解和使用。
參數(shù)是過程與外界通信的媒介,有與外層程序互相傳遞消息的使命。參數(shù)分為形式參數(shù)和實(shí)在參數(shù)。
1.形式參數(shù)是指出現(xiàn)在過程中參數(shù),簡稱形參。實(shí)在參數(shù)是指調(diào)用過程時(shí)使用的參數(shù),簡稱實(shí)參。
2.實(shí)在參數(shù)與形式參數(shù)表中的參數(shù)名可以相同,也可以不同。但實(shí)參表中的參數(shù)類型與形參表中的數(shù)據(jù)類型必須一致。
3.實(shí)在參數(shù)與形式參數(shù)發(fā)生數(shù)據(jù)傳遞時(shí),數(shù)據(jù)是一一對應(yīng)的。即實(shí)參表中的第一個(gè)參數(shù)必須只能傳給形參表中的第一個(gè)參數(shù)。
在VB中,根據(jù)參數(shù)的值是否能回傳,也就是說,根據(jù)運(yùn)算后的形式參數(shù)值能否再傳遞給與它相應(yīng)的實(shí)在參數(shù),而把參數(shù)傳遞分為兩種方式:按值傳遞和按地址傳遞。
1.按值傳遞。這種傳遞方式只能是在調(diào)用過程時(shí),主程序?qū)⒅祩鬟f給形參,而不能在運(yùn)算后形參的值再傳遞回來給實(shí)參。也就是說,這種傳遞方式只能是單向的,即使形參的值發(fā)生了改變,也不會(huì)影響到調(diào)用該過程的語句中實(shí)參的值。
例如:
Private Sub Form_Activate()
Const A%=5
Print 5,A,3+5
Call exam1(5,A,3+5)
Print 5,A,3+5
End Sub
Private Sub exam1(x,y,z)
X=x*2
Y=y+3
Z=z^2
Print x,y,z
End Sub
主程序的第一條語句,是在聲明符號常量,即讓A的值在此程序中永遠(yuǎn)等于5。此時(shí)執(zhí)行到第二條語句時(shí),在窗體中輸出常量值5、符號常量值5、和表達(dá)式3+5的值,即8。第三條語句時(shí),實(shí)現(xiàn)了過程調(diào)用中的參數(shù)傳遞,即把常量5傳遞給了子程序exam1中的x,符號常量A的值5傳遞給了子程序中的y,把表達(dá)式3+5的值8傳遞給了子程序的Z。轉(zhuǎn)到子程序后,按照子程序的過程,再分別x、y、z的新值,這時(shí),執(zhí)行子程序中的Print x,y,z,即輸出新的x、y、z的值。執(zhí)行到子程序中的End Sub語句后,返回主程序的第四條語句。
由于在剛剛進(jìn)行的參數(shù)傳遞的過程中,主程序中的實(shí)參均是常量(常量值不受任何外界影響,永遠(yuǎn)都不會(huì)變化),所以過程在被調(diào)用時(shí)對形參的任何改變都不會(huì)影響到實(shí)參,這段主程序中的實(shí)參并沒有因?yàn)樽映绦蚨l(fā)生任何的變化。
由此分析,此程序的運(yùn)行結(jié)果為:558 10864 558
此過程即為參數(shù)傳遞中的按值傳遞。
2.按地址傳遞。這種傳遞方式不是將實(shí)在參數(shù)的值傳遞給了形式參數(shù),而是將存放實(shí)在參數(shù)值的內(nèi)存中的存儲單元地址一起傳遞給了形參,此時(shí)形參和實(shí)參具有相同的存儲單元地址,也就是說,如果一旦形參的值發(fā)生改變,實(shí)參的值也會(huì)隨之一起變化,并且實(shí)參會(huì)將改變后的值帶回到調(diào)用該過程的程序里面,這種參數(shù)傳遞方式是雙向的。
例如:
Private Sub Form_Activate()
Dim a%,b%,c%
A=5:b=5:c=8
Print a,b,c
Call exam(a,b,c)
Print a,b,c
End sub
Private Sub exam(x,y,z)
X=x*2
Y=y+3
Z=z^2
End sub此例題與上一例題有稍許改動(dòng),但意義和執(zhí)行過程就有了很大的變化。
主程序中的第一條語句,定義了三個(gè)變量:a、b、c。第二條語句分別給a、b、c賦值。執(zhí)行到第四條語句時(shí),調(diào)用子程序exam,在調(diào)用的過程中,將a的值傳遞給了子程序中的形參x,將b的值給了形參y,將c的值傳遞給形參Z。由于實(shí)在參數(shù)在傳遞時(shí)為變量,所以傳遞的過程中,實(shí)參不僅將值傳遞給了形參,并且將存儲它們的地址單元一起傳遞了過去,即此時(shí)實(shí)參a與形參x共用一個(gè)存儲地址單元。同理,實(shí)參b與形參y共用一個(gè)地址單元,實(shí)參c與形參z共用同一地址。調(diào)用子程序后,子程序中分別對x、y、z的值進(jìn)行了新的計(jì)算和賦值,此時(shí),與它們同用一個(gè)地址單元的實(shí)參a、b、c也會(huì)隨之發(fā)生變化。
由此分析,此程序的運(yùn)行結(jié)果為:5 5 8
10 8 64
10 8 64
此過程實(shí)現(xiàn)了參數(shù)的按地址傳遞。
在參數(shù)傳遞的過程中,實(shí)在參數(shù)可以是常量、表達(dá)式或者變量,而形式參數(shù)作為接收數(shù)據(jù)的一方,只能是以變量的方式出現(xiàn)。如果實(shí)在參數(shù)是常量或表達(dá)式時(shí),系統(tǒng)默認(rèn)為按值傳遞參數(shù),一旦實(shí)在參數(shù)為變量時(shí),則系統(tǒng)自動(dòng)默認(rèn)采用按地址傳遞。也就是說,在按地址傳遞參數(shù)時(shí),實(shí)在參數(shù)必須是變量,常量或表達(dá)式是無法進(jìn)行地址傳遞的,因?yàn)樗鼈兊闹涤肋h(yuǎn)固定,無法因?yàn)樽映绦蛑行螀⒅档母淖兌淖儭?/p>
(責(zé)編 金東)