VB2019中什麼時候用byval

2022-02-16 13:33:25 字數 1442 閱讀 3009

1樓:網海1書生

byval就是傳值呼叫,就是把變數的值作為引數傳送到子過程中,子過程內部對這個引數進行任何修改都不會影響到原變數的值。

而把byval去掉或者改為byref則是傳址呼叫,就是把變數的記憶體地址作為引數傳送到子過程中,那麼子過程內部對這個記憶體地址進行賦值就相當於直接給原來那個變數賦值,這樣原變數的值就會跟著改變。

你這段**如果想得到100的結果,就要把test子過程的引數a的呼叫方式改為傳址,也就是去掉byval即可。

補充:當你不希望子過程改變原變數(或者說實參)的值時,子過程的引數(或者說形參)採用byval(傳值)呼叫方式;反之則要採用byref(傳址)呼叫方式。

vb中預設的是byval還是byref

2樓:枉生

byval 與 byref(預設值)

這兩個是子過程的引數傳遞時,指定引數按什麼傳遞的

byval(按值傳遞)

byref(按地址傳遞)

具體這樣來理解:

過程中的引數列表,我們稱形參

呼叫過程時的引數列表,我們稱實參

在呼叫時,我們要將實參的值傳遞給形參,這樣過程才能拿這些資料參與計算並實現一些功能

那麼在傳遞的過程中,就存在這兩種傳遞方式

傳值時(byval),是先給形參開闢一個臨時地址,將實參的內容傳入這個臨時地址,這樣,傳遞後,形參與實參是在兩上不同的地址中,也就是說他們是相互獨立的

傳址時(byref),是直接將實參的地址傳遞給形參,這樣,形參與實參就共用一個地址,所以,形參內容的改變,也直接改變了實參的內容

通過上面的分析,你只要記得:

按值傳遞時(byval),形參的改變不會影響到實參

按址傳遞時(byref),形參的改變,會影響到實參

應用時,我們可以利用按址傳遞的過程,給一個子過程(sub過程)進行引數返回

例:dim a as integer,b as integer

a=1b=2

call aaa(a,b)

print a,b '得到的結果是2 3 (形參的改變影響到了實參)

call bbb(a,b)

pring a,b '得到的結果跟上面的一樣,2 3(形參的改變並沒有影響到這個實參)

sub aaa(i as integer,j as integer) '預設,則按址傳遞

i=i+1

j=j+1

end sub

sub bbb(byval i as integer,byval j as integer)

i=i+1

j=j+1

end sub

3樓:匿名使用者

byval(表示按值傳遞)

byref(表示按地址傳遞),沒有特別宣告一般引數傳遞都是按值byval傳遞,幾乎所有程式語言都是這個傳遞方式!

vb 2019上怎麼用 picturebox 畫圓?(不要百

你的 是vb6.0的格式,在vb2013的net模式下是無法通過除錯的 vb2013中要用gdi 的方法,比如 public class form1 dim wid as integer dim hgt as integer dim bm as bitmap dim g as graphics 下面...

VB2019中如何將某一畫素點的R G B值分別提取出來

private sub picturebox1 mousemove byval sender as object,byval e as system.windows.forms.mouseeventargs handles picturebox1.mousemove if me.picturebox...

英語中,什麼時候用Was 什麼時候用is

一般過去時,過去進行時 用 was 一般現在時,現在進行時 用 is 在英語的什麼情況中,什麼時候用is什麼時候用are什麼時候用was什麼時候用were?英語中的am,is 和are都是be的變化形式,這三個詞都是 是 的含義,根據不同的主語選用不同的動詞。用法 1 當主語是i時使用am。2 當使...