摘要:VB編程中參數過程的調用是重點和難點,特別是調用過程中的參數傳遞,學生難于理解和掌握,本文結合實例,深入分析參數傳遞中的兩種方式,并對兩種方式進行舉例說明,對于學生理解和掌握參數傳遞的過程十分重要。
關鍵詞:過程調用 參數傳遞
使用Visual Basic(簡稱VB)編寫程序,除了需要進行界面設計,還需要大量的程序代碼的編寫,為了便于程序的調試與維護、提高代碼的利用率,就需要將程序分為若干模塊和子模塊,并采用過程的調用來實現。在VB教學工作中,過程調用中的參數傳遞往往是學生最難理解和掌握的知識點,本文結合實例對參數傳遞的兩種方式進行深入的分析和說明,方便學生的理解和使用。
一、參數的概念
參數是過程與外界通信的媒介,有與外層程序互相傳遞消息的使命。參數分為形式參數和實在參數。
1.形式參數是指出現在過程中參數,簡稱形參。實在參數是指調用過程時使用的參數,簡稱實參。
2.實在參數與形式參數表中的參數名可以相同,也可以不同。但實參表中的參數類型與形參表中的數據類型必須一致。
3.實在參數與形式參數發(fā)生數據傳遞時,數據是一一對應的。即實參表中的第一個參數必須只能傳給形參表中的第一個參數。
二、參數傳遞的方式
在VB中,根據參數的值是否能回傳,也就是說,根據運算后的形式參數值能否再傳遞給與它相應的實在參數,而把參數傳遞分為兩種方式:按值傳遞和按地址傳遞。
1.按值傳遞。這種傳遞方式只能是在調用過程時,主程序將值傳遞給形參,而不能在運算后形參的值再傳遞回來給實參。也就是說,這種傳遞方式只能是單向的,即使形參的值發(fā)生了改變,也不會影響到調用該過程的語句中實參的值。
例如:
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的值在此程序中永遠等于5。此時執(zhí)行到第二條語句時,在窗體中輸出常量值5、符號常量值5、和表達式3+5的值,即8。第三條語句時,實現了過程調用中的參數傳遞,即把常量5傳遞給了子程序exam1中的x,符號常量A的值5傳遞給了子程序中的y,把表達式3+5的值8傳遞給了子程序的Z。轉到子程序后,按照子程序的過程,再分別x、y、z的新值,這時,執(zhí)行子程序中的Print x,y,z,即輸出新的x、y、z的值。執(zhí)行到子程序中的End Sub語句后,返回主程序的第四條語句。
由于在剛剛進行的參數傳遞的過程中,主程序中的實參均是常量(常量值不受任何外界影響,永遠都不會變化),所以過程在被調用時對形參的任何改變都不會影響到實參,這段主程序中的實參并沒有因為子程序而發(fā)生任何的變化。
由此分析,此程序的運行結果為:5 5 8
10 8 64
5 5 8
此過程即為參數傳遞中的按值傳遞。
2.按地址傳遞。這種傳遞方式不是將實在參數的值傳遞給了形式參數,而是將存放實在參數值的內存中的存儲單元地址一起傳遞給了形參,此時形參和實參具有相同的存儲單元地址,也就是說,如果一旦形參的值發(fā)生改變,實參的值也會隨之一起變化,并且實參會將改變后的值帶回到調用該過程的程序里面,這種參數傳遞方式是雙向的。
例如:
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
此例題與上一例題有稍許改動,但意義和執(zhí)行過程就有了很大的變化。
主程序中的第一條語句,定義了三個變量:a、b、c。第二條語句分別給a、b、c賦值。執(zhí)行到第四條語句時,調用子程序exam,在調用的過程中,將a的值傳遞給了子程序中的形參x,將b的值給了形參y,將c的值傳遞給形參Z。由于實在參數在傳遞時為變量,所以傳遞的過程中,實參不僅將值傳遞給了形參,并且將存儲它們的地址單元一起傳遞了過去,即此時實參a與形參x共用一個存儲地址單元。同理,實參b與形參y共用一個地址單元,實參c與形參z共用同一地址。調用子程序后,子程序中分別對x、y、z的值進行了新的計算和賦值,此時,與它們同用一個地址單元的實參a、b、c也會隨之發(fā)生變化。
由此分析,此程序的運行結果為:5 5 8
10 8 64
10 8 64
此過程實現了參數的按地址傳遞。
三、調用過程中的參數傳遞總結
在參數傳遞的過程中,實在參數可以是常量、表達式或者變量,而形式參數作為接收數據的一方,只能是以變量的方式出現。如果實在參數是常量或表達式時,系統(tǒng)默認為按值傳遞參數,一旦實在參數為變量時,則系統(tǒng)自動默認采用按地址傳遞。也就是說,在按地址傳遞參數時,實在參數必須是變量,常量或表達式是無法進行地址傳遞的,因為它們的值永遠固定,無法因為子程序中形參值的改變而改變。
(責編 金 東)