亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

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

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

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

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

        1 基本概念

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

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

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

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

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

        2.1 子過程的定義和調用

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

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

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

        語句塊

        End Sub

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

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

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

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

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

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

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

        2.2 參數(shù)傳遞方式

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

        2.2.1 傳值

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

        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的功能是交換形式參數(shù)a、b的值。Command1_Click()事件過程中的語句Call swap1(x,y)是過程調用語句,被調過程中形參是傳值方式,執(zhí)行過程,運行結果如下。

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

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

        圖1 過程調用前內存圖 圖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 過程調用后內存圖

        2.2.2 傳地址

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

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

        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的功能是交換形式參數(shù)a、b的值,形參采用“傳地址”方式,在Command2_Click()事件過程中調用過程swap2,執(zhí)行過程,運行結果如下:

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

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

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

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

        圖7 執(zhí)行swap2過程示意圖 圖8 調用過程后內存圖

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

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

        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ù)組下標從1開始

        Private Sub Command3_Click()

        Dim x(), i%

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

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

        For i=1 To UBound(x)

        Print x(i);

        Next i

        Call sort(x)

        Print

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

        For i=1 To UBound(x)

        Print x(i);

        Next i

        End Sub

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

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

        3 結束語

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

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

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

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

        參考文獻:

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

        出版社,2013.

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

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

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

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

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

        猜你喜歡
        內存
        外部高速緩存與非易失內存結合的混合內存體系結構特性評測
        高技術通訊(2021年5期)2021-07-16 07:20:26
        “春夏秋冬”的內存
        當代陜西(2019年13期)2019-08-20 03:54:22
        內存搭配DDR4、DDR3L還是DDR3?
        基于內存的地理信息訪問技術
        上網(wǎng)本為什么只有1GB?
        欧美bbw极品另类| 国产一区二区不卡av| 亚洲女同免费在线观看| 亚洲一区二区三区中国| 婷婷五月婷婷五月| 7777精品伊人久久久大香线蕉| 中文字幕精品一二三区| 亚洲区一区二区三区四| 二区视频在线免费观看| 国产精品白浆在线观看免费| 天堂中文在线资源| 二区久久国产乱子伦免费精品| 日本女优中文字幕四季视频网站| 羞羞色院99精品全部免| 少妇爆乳无码专区| 欧美人与动牲猛交xxxxbbbb| 一个人免费观看在线视频播放| 一本久道视频无线视频试看| 少妇爽到高潮免费视频| 国产精品久久久久高潮| 波多野结衣一区二区三区高清| 在线丝袜欧美日韩制服| 久久亚洲宅男天堂网址| 日韩女优av一区二区| 肉体裸交137日本大胆摄影| 国产精品一区二区 尿失禁| 青青青草国产熟女大香蕉| 亚洲国产日韩一区二区三区四区 | 精品黄色av一区二区三区| 国产一区二区三区不卡视频| 天天躁日日躁狠狠躁av麻豆| 老熟妇乱子伦av| 国产精品久久这里只有精品 | 午夜亚洲www湿好爽| 欧美激情精品久久999| 网址视频在线成人亚洲| 亚洲av无码国产精品色软件| 国产精品老熟女露脸视频| 婷婷一区二区三区在线| 国产偷闻女邻居av在线观看| 极品少妇xxxx精品少妇偷拍|