【正文】
指將實(shí)參的地址傳給形參,使形參和實(shí)參具有相同的地址,即形參與實(shí)參共享同一存儲(chǔ)單元。 (1) 當(dāng)實(shí)參為變量或數(shù)組時(shí),形參使用關(guān)鍵字 ByRef定義 (或省略 )表示要按地址傳遞。 (2) 當(dāng)參數(shù)是數(shù)組時(shí),數(shù)組名之后必須使用一對(duì)空的圓括號(hào)。 按地址傳遞可以實(shí)現(xiàn)調(diào)用過(guò)程與子過(guò)程之間數(shù)據(jù)的雙向傳遞。 第九章 過(guò) 程 39 例 : Sub SS(ByRef X, ByRef Y, ByRef Z) X = X + 1: Y = Y + 1: Z = Z + 1 End Sub Private Sub Command1_Click() A = 1: B = 2: C = 3 Call SS(A, B, C) Print A, B, C End Sub 形參 : X Y Z 實(shí)參 : A B C 存儲(chǔ)單元 運(yùn)行時(shí),單擊命令按鈕在窗體上打印 : 2 3 4 第九章 過(guò) 程 40 【例 914】編寫一個(gè)計(jì)算乘冪的 Function過(guò)程,用來(lái)計(jì)算 x的 y次冪,其中 y0。 單擊窗體時(shí)調(diào)用該過(guò)程打印 5 5 5 5 55的值。 Option Explicit Function Power(x As Single, ByVal y As Integer) Dim result As Single result = 1 Do While y 0 result = result * x y = y 1 Loop Power = result End Function 第九章 過(guò) 程 41 Private Sub Form_Click() Dim i As Integer For i = 1 To 5 Print Power(5, i) Next i End Sub 思考 : 如果取消過(guò)程 Power中參數(shù) y前的關(guān)鍵字ByVal, 則會(huì)出現(xiàn)什么情況? 第九章 過(guò) 程 42 代碼模塊 VB應(yīng)用程序由三種模塊組成 : 窗體模塊 (Form) (文件擴(kuò)展名 .frm) 標(biāo)準(zhǔn)模塊 (Module) (文件擴(kuò)展名 .bas) 類模塊 (Class) (文件擴(kuò)展名 .cls) 應(yīng)用程序 工程文件 (.vbp) 窗體模塊 (.frm)文件 類模塊 (.cls)文件 標(biāo)準(zhǔn)模塊 (.bas)文件 Function過(guò)程 Sub過(guò)程 事件過(guò)程 Function過(guò)程 Sub過(guò)程 第九章 過(guò) 程 43 窗體模塊 包含 : 事件過(guò)程 通用過(guò)程 通用聲明 標(biāo)準(zhǔn)模塊 不對(duì)應(yīng)于某個(gè)窗體、完全是純代碼。 包含 : 全局常量、變量、全局過(guò)程 標(biāo)準(zhǔn)模塊級(jí)常量、變量、通用過(guò)程 注 : 不能包含事件過(guò)程 添加 : 工程 → 添加模塊 → 選“新建”標(biāo)簽 → 打開“添加模塊”對(duì)話框 類模塊 在類模塊中編寫代碼建立新對(duì)象。 第九章 過(guò) 程 44 過(guò)程的作用域 過(guò)程的建立位置不同,允許被訪問的范圍也不同。 作用域 : 模塊級(jí)、全局級(jí) 1. 模塊級(jí)過(guò)程 : 在 Sub過(guò)程或 Function過(guò)程前如果加Private關(guān)鍵字,則這種過(guò)程只能被其所在的窗體模塊或標(biāo)準(zhǔn)模塊中的其他過(guò)程所調(diào)用。 2. 全局過(guò)程 : 在 Sub過(guò)程或 Function過(guò)程前如果加Public關(guān)鍵字, 或者省略 Public與 Private關(guān)鍵字,則這種過(guò)程可以被該應(yīng)用程序的所有窗體模塊或所有標(biāo)準(zhǔn)模塊中的過(guò)程所調(diào)用。 3. 過(guò)程的作用域 : 見 P156 第九章 過(guò) 程 45 例 :設(shè)窗體 Form1中有按鈕 : Command Command2 Public Sub aa() MsgBox (這是窗體 Form1中的過(guò)程 ) End Sub Private Sub Command1_Click() Call aa End Sub Private Sub Command2_Click() End Sub 可以省略 第九章 過(guò) 程 46 設(shè)窗體 Form2中有按鈕 : Command1 、 Command2 Private Sub Command1_Click() Call End Sub Private Sub Command2_Click() Call End Sub 添加標(biāo)準(zhǔn)模塊 Module1 ,編寫以下過(guò)程 : Public Sub bb() MsgBox (這是標(biāo)準(zhǔn)模塊中的過(guò)程 bb) End Sub 不可以省略 可以省略 可以省略 第九章 過(guò) 程 47 變量的作用域與生存期 變量的作用域 : 指變量的 有效范圍 。 變量的生存期 : 指變量的 作用時(shí)間 。 變量的作用域 將變量分為 : 局部變量 模塊級(jí)變量 全局變量 模塊級(jí)變量 …… 全局變量 局 部 變 量 …… …… 模塊 過(guò)程 第九章 過(guò) 程 48 1. 局部變量 ? 聲明 不聲明 Dim A As Integer 39。 A每次執(zhí)行過(guò)程時(shí)被初始化 Static C As Single 39。 C在應(yīng)用程序執(zhí)行期間保持不變 ? 作用范圍 僅在聲明的過(guò)程中起作用 其他過(guò)程中即使有同名變量,也不是指同一變量 。 第九章 過(guò) 程 49 例 : Sub S() X = 1 Y = 2 Z = X + Y Print X, Y, Z End Sub Private Sub C1_Click() X = 2 Y = 3 Z = X + Y Call S