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

解析Visual Basic過程調(diào)用中參數(shù)傳遞方式

2014-04-29 12:00:52蒲會(huì)蘭丁世文李敏之張永花
計(jì)算機(jī)時(shí)代 2014年10期

蒲會(huì)蘭 丁世文 李敏之 張永花

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

關(guān)鍵詞: Visual Basic; 內(nèi)存; 過程調(diào)用; 實(shí)際參數(shù); 形式參數(shù); 參數(shù)傳遞

中圖分類號:TP311 文獻(xiàn)標(biāo)志碼: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)是以結(jié)構(gòu)化BASIC語言為基礎(chǔ),以可視化設(shè)計(jì)工具為界面設(shè)計(jì),以事件驅(qū)動(dòng)為運(yùn)行機(jī)制的高級程序設(shè)計(jì)語言,已被高校作為部分非計(jì)算機(jī)專業(yè)的入門課程。過程調(diào)用是VB程序設(shè)計(jì)的難點(diǎn)及重點(diǎn)之一,初學(xué)者對過程調(diào)用中不同參數(shù)傳遞方式很難理解和掌握。本文針對該課程教學(xué)難點(diǎn),結(jié)合多年的實(shí)踐教學(xué)經(jīng)驗(yàn),將內(nèi)存概念引入過程調(diào)用,通過直觀的內(nèi)存管理圖幫助學(xué)生理解VB過程調(diào)用中的參數(shù)傳遞方式,在教學(xué)實(shí)踐中取得了良好的效果。

1 基本概念

過程是VB程序的基本組成單位,每個(gè)過程是為了完成一定的任務(wù),由一組獨(dú)立的程序代碼組成。在VB中除了系統(tǒng)提供的內(nèi)部函數(shù)過程和事件過程外,用戶可根據(jù)要解決的問題,定義Sub子過程和Function函數(shù)過程。

要執(zhí)行子過程中的代碼或獲得函數(shù)過程的返回值,只能通過調(diào)用過程完成,在調(diào)用過程時(shí),被調(diào)過程可以接收主調(diào)過程傳遞過來的參數(shù),并能根據(jù)接收到的參數(shù)控制程序流程或?qū)邮盏降膮?shù)進(jìn)行處理。主調(diào)過程中的參數(shù)稱為實(shí)際參數(shù),簡稱實(shí)參,實(shí)參可以是常量、變量、表達(dá)式、數(shù)組名、數(shù)組元素等;被調(diào)過程中的參數(shù)稱為形式參數(shù),簡稱形參,形參一般為內(nèi)存變量或數(shù)組名。在Visual Basic過程調(diào)用中,參數(shù)傳遞方式分為“傳值”和“傳地址”兩種[1-4]。

2 內(nèi)存概念在過程調(diào)用中的應(yīng)用

運(yùn)行VB程序時(shí),系統(tǒng)將根據(jù)變量或數(shù)組的數(shù)據(jù)類型,為其分配相應(yīng)的內(nèi)存單元,以便存儲(chǔ)它們的內(nèi)容,內(nèi)存區(qū)的每一個(gè)存儲(chǔ)單元有一個(gè)編號,即內(nèi)存單元的“地址”,程序中的各種操作在內(nèi)存中均表現(xiàn)為對內(nèi)存單元的讀寫操作[5]。本文通過動(dòng)態(tài)展現(xiàn)過程調(diào)用中內(nèi)存單元的變化情況,幫助學(xué)生理解“傳值”方式和“傳地址”方式的不同之處,使這一難點(diǎn)迎刃而解。

用戶根據(jù)要解決的問題可定義兩種過程:當(dāng)過程有多個(gè)返回值或無返回值時(shí),常用子過程;當(dāng)過程有一個(gè)返回值時(shí),函數(shù)過程比較直觀。由于在兩種過程調(diào)用中參數(shù)傳遞機(jī)制相同,故本文不妨以子過程的定義、調(diào)用和參數(shù)傳遞為例進(jìn)行探討。

2.1 子過程的定義和調(diào)用

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

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

局部變量或常數(shù)定義

語句塊

End Sub

其中,形參列表指明了參數(shù)的類型和個(gè)數(shù),每個(gè)參數(shù)的形式為:

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

形參名,簡稱形參或啞元,只能是變量或數(shù)組名,用于在調(diào)用該過程時(shí)的數(shù)據(jù)傳遞;變量名前的[ ByVal | ByRef ]是可選的,默認(rèn)為ByRef,表示形參是地址傳遞;ByVal表示形參是值傳遞。

子過程的調(diào)用形式如下[1-3]:

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

【形式2】子過程名[實(shí)參列表]

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

2.2 參數(shù)傳遞方式

調(diào)用過程時(shí),一般將主調(diào)過程的實(shí)參傳遞給被調(diào)過程的形參,完成實(shí)參與形參的結(jié)合,然后執(zhí)行被調(diào)過程體。實(shí)參與形參的結(jié)合有“傳值”與“傳地址”兩種方式。

2.2.1 傳值

在定義過程時(shí),若采用傳值方式,則調(diào)用過程時(shí),系統(tǒng)為形參開辟臨時(shí)存儲(chǔ)區(qū),將各實(shí)參值復(fù)制給形參,有如下過程:

Sub swap1(ByVal a%, ByVal b%)

Dim t%

t=a: a=b: b=t

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

End Sub

Private Sub Command1_Click()

Dim x%, y%

x=6: y=8

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

Call swap1(x, y)

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

End Sub

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

通過內(nèi)存管理圖分析過程調(diào)用:調(diào)用過程前系統(tǒng)只為實(shí)參x和y分配內(nèi)存單元,其地址假定為2000和2004,如圖1所示;調(diào)用過程時(shí),系統(tǒng)根據(jù)形參a和b的類型為其臨時(shí)分配內(nèi)存單元,并將主調(diào)過程實(shí)參的值一一復(fù)制到被調(diào)過程對應(yīng)形參的內(nèi)存單元中,即形參獲得了實(shí)參的值,如圖2所示;當(dāng)執(zhí)行swap1過程時(shí),由于實(shí)參與形參已斷開了聯(lián)系,即實(shí)參、形參占用不同的內(nèi)存單元,形參值的變化不會(huì)影響實(shí)參值,如圖3所示;過程調(diào)用結(jié)束時(shí),形參所占內(nèi)存單元被釋放,實(shí)參x和y的值并未交換,如圖4所示。

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

圖1 過程調(diào)用前內(nèi)存圖 圖2 參數(shù)傳遞示意圖

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

圖3 執(zhí)行swap1過程示意圖 圖4 過程調(diào)用后內(nèi)存圖

2.2.2 傳地址

⑴ 內(nèi)存變量作為過程參數(shù)

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

Sub swap2(ByRef a%, ByRef b%)

Dim t%

t=a: a=b: b=t

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

End Sub

Private Sub Command2_Click()

Dim x%, y%

x=6: y=8

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

Call swap2(x, y)

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

End Sub

子過程swap2的功能是交換形式參數(shù)a、b的值,形參采用“傳地址”方式,在Command2_Click()事件過程中調(diào)用過程swap2,執(zhí)行過程,運(yùn)行結(jié)果如下:

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

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

圖5 調(diào)用過程前內(nèi)存圖 圖6 參數(shù)傳遞示意圖

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

圖7 執(zhí)行swap2過程示意圖 圖8 調(diào)用過程后內(nèi)存圖

⑵ 數(shù)組作為過程參數(shù)

數(shù)組作為過程參數(shù)傳遞時(shí),也采用傳地址方式,在調(diào)用過程時(shí),系統(tǒng)把實(shí)參數(shù)組的首地址傳給形參數(shù)組,使形參數(shù)組也具有與實(shí)參數(shù)組相同的首地址,由于形參數(shù)組和實(shí)參數(shù)組各元素共用相同的內(nèi)存單元,對形參數(shù)組中某一元素的操作將影響實(shí)參數(shù)組中的對應(yīng)元素。過程如下所示:

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 '在通用部分聲明數(shù)組下標(biāo)從1開始

Private Sub Command3_Click()

Dim x(), i%

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

Print "調(diào)用sort前,數(shù)組元素:"

For i=1 To UBound(x)

Print x(i);

Next i

Call sort(x)

Print

Print "調(diào)用sort后,數(shù)組元素:"

For i=1 To UBound(x)

Print x(i);

Next i

End Sub

子過程sort的功能是對形參數(shù)組元素進(jìn)行升序排列,在Command3_Click()事件過程中調(diào)用該過程,形參是一個(gè)不指出元素個(gè)數(shù)的數(shù)組,采用傳地址方式,運(yùn)行結(jié)果如下:

通過內(nèi)存管理圖分析過程調(diào)用:調(diào)用過程前系統(tǒng)只為實(shí)參數(shù)組x分配內(nèi)存單元,其首地址假定為2000,如圖9所示;調(diào)用sort過程,形參數(shù)組a和實(shí)參數(shù)組x結(jié)合時(shí),不是把實(shí)參數(shù)組x的各個(gè)元素值逐個(gè)復(fù)制到相應(yīng)的形參數(shù)組a,而是將實(shí)參數(shù)組的首地址傳送給相應(yīng)的形參數(shù)組,即形參數(shù)組首元素a(1)和實(shí)參數(shù)組首元素x(1)占用相同的內(nèi)存單元,如圖10所示,同理,a(n)和x(n)共享同一內(nèi)存單元;執(zhí)行sort過程,改變數(shù)組a中各元素的值時(shí)也改變了數(shù)組x對應(yīng)元素的值,如圖11所示;當(dāng)sort過程執(zhí)行結(jié)束時(shí),實(shí)參數(shù)組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 過程調(diào)用前內(nèi)存圖 圖10 參數(shù)傳遞示意圖

[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 執(zhí)行sort過程示意圖 圖12 過程調(diào)用后內(nèi)存圖

3 結(jié)束語

參數(shù)傳遞選用傳值還是傳地址的一般考慮是:若要被調(diào)過程改變實(shí)參的值,則形參必須是傳地址方式;若不希望被調(diào)過程體修改實(shí)參的值,則應(yīng)選用傳值方式。

⑴ “傳值”方式:調(diào)用過程時(shí),系統(tǒng)為形參分配臨時(shí)存儲(chǔ)單元,將各實(shí)參值復(fù)制給形參,之后實(shí)參與形參斷開了聯(lián)系,在被調(diào)過程體內(nèi)對形參的操作不會(huì)影響到實(shí)參,“傳值”是單向的。其形參形式為:ByVal 形參變量,實(shí)參為變量、常量、表達(dá)式、數(shù)組元素等。

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

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

參考文獻(xiàn):

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

出版社,2013.

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

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

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

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

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

主站蜘蛛池模板: 国产熟睡乱子伦视频网站| vvvv98国产成人综合青青| 亚洲男女在线| 久久亚洲国产最新网站| 国产综合网站| 狠狠v日韩v欧美v| 啊嗯不日本网站| 国产理论一区| 国产在线专区| 一区二区偷拍美女撒尿视频| 99re热精品视频中文字幕不卡| 综合亚洲网| 亚洲国产第一区二区香蕉| 国产人免费人成免费视频| 高清大学生毛片一级| 亚洲天堂网站在线| 中国国语毛片免费观看视频| 精品国产一区91在线| 97在线免费| 久爱午夜精品免费视频| 日韩成人在线一区二区| 91在线免费公开视频| 欧美三级视频网站| 国产在线98福利播放视频免费| 99精品国产高清一区二区| 久久综合亚洲色一区二区三区 | 本亚洲精品网站| 国产乱人视频免费观看| 国产精品毛片一区| 亚洲精品高清视频| 女人一级毛片| 无码电影在线观看| 亚洲区视频在线观看| 狠狠综合久久久久综| 在线免费观看AV| 手机成人午夜在线视频| a级毛片毛片免费观看久潮| 亚洲婷婷丁香| 又猛又黄又爽无遮挡的视频网站 | 欧美一区二区三区国产精品| 国产在线91在线电影| 极品国产一区二区三区| 囯产av无码片毛片一级| 97视频免费在线观看| 99精品视频在线观看免费播放 | 亚洲国产天堂在线观看| 久久综合亚洲鲁鲁九月天| 国产人成在线视频| 色综合狠狠操| 内射人妻无码色AV天堂| 亚洲精品无码在线播放网站| 久久窝窝国产精品午夜看片| 国产在线欧美| 国产人成午夜免费看| a级毛片视频免费观看| 国产精品嫩草影院av| 免费无码网站| 在线欧美日韩| 色综合天天操| 日韩亚洲高清一区二区| 影音先锋丝袜制服| 欧美亚洲一区二区三区导航| 精品综合久久久久久97| 91在线丝袜| 国产香蕉在线视频| 永久成人无码激情视频免费| 欧美97欧美综合色伦图| 久久人妻xunleige无码| 亚洲AV无码一二区三区在线播放| 亚洲第一天堂无码专区| 欧美一级高清片久久99| www.精品国产| 欧美福利在线| 国产欧美日韩在线在线不卡视频| 伊人网址在线| 在线观看免费人成视频色快速| 最新国语自产精品视频在| 国产日韩精品一区在线不卡| 欧日韩在线不卡视频| 国内精品视频在线| 亚洲午夜18| 国产欧美另类|