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.

主站蜘蛛池模板: 韩日无码在线不卡| 国产哺乳奶水91在线播放| 91麻豆精品国产高清在线| 91极品美女高潮叫床在线观看| 亚洲乱码在线视频| 国产精品久久自在自线观看| 强乱中文字幕在线播放不卡| 日本精品视频一区二区| 国产在线精品人成导航| 国产成人精品一区二区不卡| 尤物午夜福利视频| 亚洲欧洲自拍拍偷午夜色无码| 天堂中文在线资源| 一区二区三区四区精品视频| aaa国产一级毛片| 热久久这里是精品6免费观看| 国产v欧美v日韩v综合精品| 成人无码区免费视频网站蜜臀| 国产一区二区三区夜色| 亚洲成A人V欧美综合| 亚洲第一天堂无码专区| 欧美一级特黄aaaaaa在线看片| 国产欧美成人不卡视频| 99久久精品美女高潮喷水| 国产日韩欧美一区二区三区在线| 久久久精品久久久久三级| 99国产精品国产| 欧美va亚洲va香蕉在线| 国产亚洲精品资源在线26u| 久久性视频| 日韩第九页| 国产精品主播| 国产精欧美一区二区三区| 全裸无码专区| 91国内外精品自在线播放| 亚洲综合色在线| 免费一看一级毛片| 欧美亚洲中文精品三区| 最新国产你懂的在线网址| 成人一级免费视频| 国产成人精品一区二区不卡| 99这里精品| 亚洲国产精品一区二区第一页免 | 欧美黑人欧美精品刺激| 特黄日韩免费一区二区三区| 成人自拍视频在线观看| 久久精品丝袜| 国产电话自拍伊人| 伊人91视频| 日日拍夜夜嗷嗷叫国产| 女人18一级毛片免费观看| 亚洲伊人天堂| 尤物特级无码毛片免费| 久久无码av三级| 91亚洲精品国产自在现线| 欧美人与牲动交a欧美精品 | 国产综合网站| 国产婬乱a一级毛片多女| 亚洲综合18p| 国产超薄肉色丝袜网站| 热这里只有精品国产热门精品| 热九九精品| 亚洲国产欧美中日韩成人综合视频| 国产特一级毛片| 夜色爽爽影院18禁妓女影院| 久久人体视频| 91久久偷偷做嫩草影院| 国产jizzjizz视频| 国产凹凸一区在线观看视频| 日韩AV无码免费一二三区| 国产欧美日韩视频怡春院| 日韩欧美中文字幕在线精品| jizz国产视频| 亚洲无码熟妇人妻AV在线| 欧美国产中文| 欧美日韩国产系列在线观看| 成人一区在线| 久久网综合| 国产主播福利在线观看| A级全黄试看30分钟小视频| 久久国语对白| 手机在线免费不卡一区二|