999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

解析Visual Basic過程調用中參數傳遞方式

2014-04-29 12:00:52蒲會蘭丁世文李敏之張永花
計算機時代 2014年10期

蒲會蘭 丁世文 李敏之 張永花

摘 要: 過程調用作為Visual Basic程序設計的難點及重點之一,初學者對其中不同參數傳遞方式很難理解和掌握。為此提出了過程調用結合內存管理的新教學方法,將內存概念引入過程調用,通過分析計算機內存管理和Visual Basic程序運行的相互關系,對過程間不同參數的傳遞方式進行了解析,將抽象的過程執行步驟以直觀的內存管理圖示表現出來,幫助學生理解Visual Basic過程調用中的參數傳遞方式。該方法在教學實踐中取得了良好的效果。

關鍵詞: Visual Basic; 內存; 過程調用; 實際參數; 形式參數; 參數傳遞

中圖分類號:TP311 文獻標志碼:A 文章編號:1006-8228(2014)10-46-03

Analysis on parameter transfer modes in Visual Basic procedure calling

Pu Huilan1, Ding Shiwen2, Li Minzhi1, Zhang Yonghua1

(1. School of Electronic and Information Engineering, Lanzhou Jiaotong University, Lanzhou, Gansu 730070, China;

2. School of Environmental and Municipal Engineering, Lanzhou Jiaotong University)

Abstract: Procedure calling is one of the difficulties and emphasis in Visual Basic programming. Its uneasy for the beginners to understand and grasp that transfer modes of different parameters in the procedure calling. With years of experience in the practice teaching, a new teaching method incorporated with procedure calling and main memory management is proposed. The concept of main memory is introduced to procedure calling. Through analysis on the relationship of main memory management and Visual Basic program running, transfer modes of different parameters in Visual Basic procedure calling are explored. The abstract running steps in the procedure calling are displayed by definite main memory management graph. It helps students understand the way of parameter passing in Visual Basic procedure calling, which has achieved good effect in teaching practice.

Key words: Visual Basic; main memory; procedure calling; nominal parameter; specific parameter; parameter transfer

0 引言

Visual Basic(簡稱VB)是以結構化BASIC語言為基礎,以可視化設計工具為界面設計,以事件驅動為運行機制的高級程序設計語言,已被高校作為部分非計算機專業的入門課程。過程調用是VB程序設計的難點及重點之一,初學者對過程調用中不同參數傳遞方式很難理解和掌握。本文針對該課程教學難點,結合多年的實踐教學經驗,將內存概念引入過程調用,通過直觀的內存管理圖幫助學生理解VB過程調用中的參數傳遞方式,在教學實踐中取得了良好的效果。

1 基本概念

過程是VB程序的基本組成單位,每個過程是為了完成一定的任務,由一組獨立的程序代碼組成。在VB中除了系統提供的內部函數過程和事件過程外,用戶可根據要解決的問題,定義Sub子過程和Function函數過程。

要執行子過程中的代碼或獲得函數過程的返回值,只能通過調用過程完成,在調用過程時,被調過程可以接收主調過程傳遞過來的參數,并能根據接收到的參數控制程序流程或對接收到的參數進行處理。主調過程中的參數稱為實際參數,簡稱實參,實參可以是常量、變量、表達式、數組名、數組元素等;被調過程中的參數稱為形式參數,簡稱形參,形參一般為內存變量或數組名。在Visual Basic過程調用中,參數傳遞方式分為“傳值”和“傳地址”兩種[1-4]。

2 內存概念在過程調用中的應用

運行VB程序時,系統將根據變量或數組的數據類型,為其分配相應的內存單元,以便存儲它們的內容,內存區的每一個存儲單元有一個編號,即內存單元的“地址”,程序中的各種操作在內存中均表現為對內存單元的讀寫操作[5]。本文通過動態展現過程調用中內存單元的變化情況,幫助學生理解“傳值”方式和“傳地址”方式的不同之處,使這一難點迎刃而解。

用戶根據要解決的問題可定義兩種過程:當過程有多個返回值或無返回值時,常用子過程;當過程有一個返回值時,函數過程比較直觀。由于在兩種過程調用中參數傳遞機制相同,故本文不妨以子過程的定義、調用和參數傳遞為例進行探討。

2.1 子過程的定義和調用

子過程的定義形式如下[1-3]:

[ Public | Private ]Sub 子過程名([形參列表])

局部變量或常數定義

語句塊

End Sub

其中,形參列表指明了參數的類型和個數,每個參數的形式為:

[ ByVal | ByRef ]形參名[()][As 類型]

形參名,簡稱形參或啞元,只能是變量或數組名,用于在調用該過程時的數據傳遞;變量名前的[ ByVal | ByRef ]是可選的,默認為ByRef,表示形參是地址傳遞;ByVal表示形參是值傳遞。

子過程的調用形式如下[1-3]:

【形式1】call子過程名[(實參列表)]

【形式2】子過程名[實參列表]

其中,實參列表簡稱實參,它的個數應與形參的個數保持相同;其位置、類型與形參一一對應。【形式1】中,若無實參,則省略括號,若有實參,則實參必須加括號;【形式2】中實參無需加括號。

2.2 參數傳遞方式

調用過程時,一般將主調過程的實參傳遞給被調過程的形參,完成實參與形參的結合,然后執行被調過程體。實參與形參的結合有“傳值”與“傳地址”兩種方式。

2.2.1 傳值

在定義過程時,若采用傳值方式,則調用過程時,系統為形參開辟臨時存儲區,將各實參值復制給形參,有如下過程:

Sub swap1(ByVal a%, ByVal b%)

Dim t%

t=a: a=b: b=t

Print "swap1過程內:a="; a; Tab(24); "b="; b

End Sub

Private Sub Command1_Click()

Dim x%, y%

x=6: y=8

Print "調用swap1前:x="; x; Tab(24); "y="; y

Call swap1(x, y)

Print "調用swap1后:x="; x; Tab(24); "y="; y

End Sub

子過程swap1的功能是交換形式參數a、b的值。Command1_Click()事件過程中的語句Call swap1(x,y)是過程調用語句,被調過程中形參是傳值方式,執行過程,運行結果如下。

通過內存管理圖分析過程調用:調用過程前系統只為實參x和y分配內存單元,其地址假定為2000和2004,如圖1所示;調用過程時,系統根據形參a和b的類型為其臨時分配內存單元,并將主調過程實參的值一一復制到被調過程對應形參的內存單元中,即形參獲得了實參的值,如圖2所示;當執行swap1過程時,由于實參與形參已斷開了聯系,即實參、形參占用不同的內存單元,形參值的變化不會影響實參值,如圖3所示;過程調用結束時,形參所占內存單元被釋放,實參x和y的值并未交換,如圖4所示。

[2000][2004][x][y][\&6\&\&8\&\&] [3000][3004][a][b][2000][2004][x][y][\&6\&\&8\&\&][\&6\&\&8\&\&]

圖1 過程調用前內存圖 圖2 參數傳遞示意圖

[3000][3004][a][b][2000][2004][x][y][\&6\&\&8\&\&][\&8\&\&6\&6\&][3006][t] [2000][2004][x][y][\&6\&\&8\&\&]

圖3 執行swap1過程示意圖 圖4 過程調用后內存圖

2.2.2 傳地址

⑴ 內存變量作為過程參數

在定義過程時,若采用傳地址方式,則調用過程時,系統將各實參的地址傳遞給形參,形參、實參具有相同的地址,即形參變量與實參變量共用相同的存儲單元,在被調用過程中對形參的任何操作將變成了對相應實參的操作。過程如下所示:

Sub swap2(ByRef a%, ByRef b%)

Dim t%

t=a: a=b: b=t

Print "swap2過程內:a="; a; Tab(24); "b="; b

End Sub

Private Sub Command2_Click()

Dim x%, y%

x=6: y=8

Print "調用swap2前:x="; x; Tab(24); "y="; y

Call swap2(x, y)

Print "調用swap2后:x="; x; Tab(24); "y="; y

End Sub

子過程swap2的功能是交換形式參數a、b的值,形參采用“傳地址”方式,在Command2_Click()事件過程中調用過程swap2,執行過程,運行結果如下:

通過內存管理圖分析調用過程:調用過程前系統僅為實參x和y分配內存單元,其地址假定為2000和2004,如圖5所示;調用過程時,由于形參前的關鍵字為“ByRef”,即采用傳地址方式,因此形參和實參結合時,不是把實參的值傳遞給形參,而是將實參的地址傳給形參,使形參和實參具有相同的地址,占有相同的內存單元,即x和a、y和b占有相同的內存單元,如圖6所示;執行swap2過程,形參值進行交換,即對實參x和y的內存單元值進行修改,如圖7所示;所以過程調用結束時實參x和y的值已被交換,如圖8所示。

[2000][2004][x][y][\&6\&\&8\&\&] [2000][2004][x][y][\&6\&\&8\&\&][a][b]

圖5 調用過程前內存圖 圖6 參數傳遞示意圖

[2000][2004][x][y][\&8\&\&6\&6\&][a][b][t][2006] [2000][2004][x][y][\&8\&\&6\&\&]

圖7 執行swap2過程示意圖 圖8 調用過程后內存圖

⑵ 數組作為過程參數

數組作為過程參數傳遞時,也采用傳地址方式,在調用過程時,系統把實參數組的首地址傳給形參數組,使形參數組也具有與實參數組相同的首地址,由于形參數組和實參數組各元素共用相同的內存單元,對形參數組中某一元素的操作將影響實參數組中的對應元素。過程如下所示:

Sub sort(a())

Dim i%, j%, mini%, t%

For i=1 To UBound(a)-1

mini=i

For j=i+1 To UBound(a)

If a(j)

Next j

t=a(i): a(i)=a(mini): a(mini)=t

Next i

End Sub

Option Base 1 '在通用部分聲明數組下標從1開始

Private Sub Command3_Click()

Dim x(), i%

x=Array(5, 4, 1, 2, 8, 7)

Print "調用sort前,數組元素:"

For i=1 To UBound(x)

Print x(i);

Next i

Call sort(x)

Print

Print "調用sort后,數組元素:"

For i=1 To UBound(x)

Print x(i);

Next i

End Sub

子過程sort的功能是對形參數組元素進行升序排列,在Command3_Click()事件過程中調用該過程,形參是一個不指出元素個數的數組,采用傳地址方式,運行結果如下:

通過內存管理圖分析過程調用:調用過程前系統只為實參數組x分配內存單元,其首地址假定為2000,如圖9所示;調用sort過程,形參數組a和實參數組x結合時,不是把實參數組x的各個元素值逐個復制到相應的形參數組a,而是將實參數組的首地址傳送給相應的形參數組,即形參數組首元素a(1)和實參數組首元素x(1)占用相同的內存單元,如圖10所示,同理,a(n)和x(n)共享同一內存單元;執行sort過程,改變數組a中各元素的值時也改變了數組x對應元素的值,如圖11所示;當sort過程執行結束時,實參數組x的元素已升序排列,如圖12所示。

[5\&4\&1\&2\&8\&7\&] [2000][x(1)][x(2)][x(3)][x(4)][x(5)][x(6)][x] [5\&4\&1\&2\&8\&7\&] [2000][x(1)][x(2)][x(3)][x(4)][x(5)][x(6)][x][a][a(1)][a(2)][a(3)][a(4)][a(5)][a(6)]

圖9 過程調用前內存圖 圖10 參數傳遞示意圖

[1\&2\&4\&5\&7\&8\&] [2000][x(1)][x(2)][x(3)][x(4)][x(5)][x(6)][x][a][a(1)][a(2)][a(3)][a(4)][a(5)][a(6)] [1\&2\&4\&5\&7\&8\&] [2000][x(1)][x(2)][x(3)][x(4)][x(5)][x(6)][x]

圖11 執行sort過程示意圖 圖12 過程調用后內存圖

3 結束語

參數傳遞選用傳值還是傳地址的一般考慮是:若要被調過程改變實參的值,則形參必須是傳地址方式;若不希望被調過程體修改實參的值,則應選用傳值方式。

⑴ “傳值”方式:調用過程時,系統為形參分配臨時存儲單元,將各實參值復制給形參,之后實參與形參斷開了聯系,在被調過程體內對形參的操作不會影響到實參,“傳值”是單向的。其形參形式為:ByVal 形參變量,實參為變量、常量、表達式、數組元素等。

⑵ “傳地址”方式:調用過程時,若形參為變量,系統將各實參的地址傳遞給形參,形參、實參共用相同的內存單元;若形參為數組,系統將實參數組的起始地址傳遞給形參,使形參數組具有與實參數組相同的起始地址,形參數組和實參數組各元素共用相同的內存單元。因此,在“傳地址”方式中,被調過程體中對形參的操作,變成了對相應實參的操作,形參值變化使得實參的值也變化。其形參形式為:[ByRef] 形參變量或數組,實參是變量或數組,不能是常量、表達式。

本文針對初學者在學習VB過程調用中存在的問題,將內存的概念引入過程調用,讓學生通過直觀的內存管理圖來理解過程調用中的參數傳遞方式,該方法已在實際教學中運用。實踐表明,內存管理圖對幫助學生理解和掌握過程調用中的參數傳遞方式效果良好。

參考文獻:

[1] 龔沛曾,楊志強等著.Visual Basic程序設計教程(第4版)[M].高等教育

出版社,2013.

[2] 林卓然.VB語言程序設計(第2版)[M].電子工業出版社, 2009.

[3] 楊忠寶,康順哲.VB語言程序設計教程[M].人民郵電出版社,2010.

[4] 教育部考試中心.全國計算機等級考試二級教程二級VB語言程序

設計教程(2013年版)[M].高等教育出版社,2013.

[5] 白中英.計算機組成原理(第4版)[M].科學出版社,2007.

主站蜘蛛池模板: 日本国产精品| 欧洲av毛片| 日本免费福利视频| 欧美色伊人| 毛片免费观看视频| 亚洲最大福利视频网| 婷婷六月综合网| 老司机精品一区在线视频| 亚洲日韩AV无码一区二区三区人| 国产一区亚洲一区| 亚洲天堂区| 久久精品波多野结衣| 99精品在线看| 欧美日韩在线成人| 国产无码制服丝袜| 天堂网亚洲系列亚洲系列| 国产在线欧美| 欧美伊人色综合久久天天| 中文字幕第4页| 欧美三級片黃色三級片黃色1| 精品国产污污免费网站| 久久国产亚洲偷自| 亚洲国产欧洲精品路线久久| 午夜日b视频| 99热这里只有精品免费| 九色综合伊人久久富二代| 日本a级免费| 国产av一码二码三码无码| 欧美精品成人| 精品视频一区二区三区在线播| 欧洲亚洲欧美国产日本高清| 国产v精品成人免费视频71pao| V一区无码内射国产| 国产一区在线视频观看| 午夜福利亚洲精品| 久久精品无码中文字幕| 99re经典视频在线| 久久久国产精品无码专区| 成人在线综合| 国产精品综合色区在线观看| 奇米影视狠狠精品7777| 中文字幕无码中文字幕有码在线| 91原创视频在线| 国产精品自在拍首页视频8| 亚洲最猛黑人xxxx黑人猛交| а∨天堂一区中文字幕| 亚洲人成网站观看在线观看| 色偷偷av男人的天堂不卡| 九色国产在线| 亚洲第一区欧美国产综合 | 免费一级毛片在线播放傲雪网| 亚洲婷婷在线视频| 久久综合AV免费观看| 久久综合九九亚洲一区| 亚洲无码高清一区| 精品国产免费人成在线观看| 亚洲国产理论片在线播放| 成年人福利视频| 国产电话自拍伊人| 一本视频精品中文字幕| 九九热精品视频在线| 国产h视频免费观看| 99精品国产自在现线观看| 亚洲人成网站色7777| 免费啪啪网址| 2021国产在线视频| 国产成人无码综合亚洲日韩不卡| www.精品国产| 91美女视频在线| 高清久久精品亚洲日韩Av| 国产亚洲精品精品精品| 欧美亚洲国产日韩电影在线| 国产精品一区在线麻豆| 综合人妻久久一区二区精品| 99在线视频免费| 国产成人欧美| 亚洲国产日韩在线观看| 在线国产91| 谁有在线观看日韩亚洲最新视频 | 亚洲精品无码在线播放网站| 第一区免费在线观看| 午夜精品区|