VB中ByVal與ByRef有什麼區別

時間 2022-01-22 20:40:08

1樓:禕秀曼

具體這樣來理解:

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

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

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

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

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

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

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

2樓:網海1書生

byval是傳值呼叫,也就是說呼叫的是引數的值,對這個值進行任何操作都不會影響到原引數,或者說呼叫前的引數和呼叫後使用的引數是不同的兩個引數;

byref是傳址呼叫,也就是說呼叫的是引數的記憶體地址,對這個地址進行的任何操作都會直接影響到原引數,或者說呼叫前的引數和呼叫後的引數實際上是同一個引數。

3樓:匿名使用者

byval 呼叫是傳遞的是值

byref 呼叫是傳遞的是引用 類似於 c 裡的地址

vb中byval與byref有什麼區別

4樓:大野瘦子

1、意思上的區別

byval是值傳遞,byref是地址傳遞。在交換函式裡單純交換值時沒有效果的,需要交換對應的地址。

2、賦值

在函式內部,引用引數(ref)被視為初始已賦值,輸出引數(out)被視為初始未賦值。

3、用法

引用引數(ref)在可以作為引用引數在函式成員呼叫中傳遞之前,必須已明確賦值,而輸出引數(out)在可以作為輸出引數在函式成員呼叫中傳遞之前不一定要明確賦值,在該函式成員正常返回前都必須已明確賦值。

byval和byref的用法

byref 是在過程中使用的數值和外面的數值相等了,並且一旦在過程中改變了這個數值,那麼引用過程的數值也修改了。一般來說預設就是byref。

byval 是為這個變數在記憶體中重新開闢一個地址進行儲存。在過程中修改這個數值不會影響這個數值。

應當宣告成過程,再ps一下,修改一下:

(1)byref

例如:sub byr(byref a as integer)'byref不寫也是對的

a=10

end sub

然後如果我們這樣用

dim x as integer

byr x

msgbox x

輸出10

(2)byval

例如:sub byv(byval a as integer)

a=10

end sub

然後再dim x as integer

byv x

msgbox x

5樓:匿名使用者

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

6樓:匿名使用者

精彩回答 下面 按值傳遞 結果是錯誤的昂 ab值不變 按值傳遞的話依然是1和2

7樓:匿名使用者

byref是按引用傳遞引數

byval是按值傳遞引數

一個例子:

a=0public sub aa(byval m as integer)

m=100

end sub

call aa

過程呼叫完後a 的值還是0

a=0public sub aa(byref m as integer)

m=100

end sub

call aa

過程呼叫完後a 的值是100

h是byval,j是byref

8樓:匿名使用者

h是byval,j是預設的byref

9樓:匿名使用者

byval(按值傳遞)

byref(按地址傳遞)

10樓:

byval是值傳遞;byref是地址傳遞。在交換函式裡單純交換值時沒有效果的,需要交換對應的地址。

主要區別:

1、引用引數(ref)在可以作為引用引數在函式成員呼叫中傳遞之前,必須已明確賦值,而輸出引數(out)在可以作為輸出引數在函式成員呼叫中傳遞之前不一定要明確賦值,在該函式成員正常返回前都必須已明確賦值。

2、在函式內部,引用引數(ref)被視為初始已賦值,輸出引數(out)被視為初始未賦值。

3、預設地,vb中的所有引數都是值傳遞。只有在引數的修飾符中明確包含out或ref,才是引用傳遞。但是需要知道的是,當引數的型別是引用型別時,你傳遞的是一個物件的引用而不是實際的物件。

vb中預設的是byval還是byref

11樓:枉生

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

12樓:匿名使用者

byval(表示按值傳遞)

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

vb中,byval和byref的用法有什麼區別啊?具體能舉個例子嗎?困惑~~~

13樓:匿名使用者

二樓正解!一樓的函式過程需要最後把引數賦值給函式名的…少一句賦值**,其他沒什麼問題!建議樓主看下關於sub過程與function過程的講解,不算難!!

14樓:匿名使用者

(1)byref

例如function byr(byref a as integer)a=10

end function

然後如果我們這樣用

dim x as integer

byr x

msgbox x

輸出10

(2)byval

例如function byv(byval a as integer)a=10

end function

然後再dim x as integer

byv x

msgbox x

輸出0,因為傳值,無法返回。

注:陣列、自定義型別只能通過byref傳,因為他們不是一個值,是一組值,一組值就只能傳記憶體地址了。

15樓:匿名使用者

byref說明白點就是在過程中使用的數值和外面的數值相等了,並且一旦在過程中改變了這個數值,那麼引用過程的數值也修改了。一般來說預設就是byref。

優點:節約一個記憶體地址的大小,並且實現數值的修改

byval指的是為這個變數在記憶體中重新開闢一個地址進行儲存。在過程中修改這個數值不會影響這個數值。

ps下,樓上的有些地方寫錯了function必須有返回值。應當宣告成過程。

再ps一下,他的解釋也是對的

對他修改一下

(1)byref

例如sub byr(byref a as integer)'byref不寫也是對的

a=10

end sub

然後如果我們這樣用

dim x as integer

byr x

msgbox x

輸出10

(2)byval

例如sub byv(byval a as integer)

a=10

end sub

然後再dim x as integer

byv x

msgbox x

vb中byval和byref有什麼不同

16樓:玲晶苒溪

byval 與 byref(預設值)

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

byref(按地址傳遞)

具體這樣來理解

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

excel中自帶的vba和vb有什麼區別

17樓:育知同創教育

vba是office中自帶的程式語言,而vb是獨立的開發程式,也可以說,vba是vb的一個子集,兩者**的編寫規則基本相同

vb 裡paramarray和byref有什麼區別

18樓:匿名使用者

paramarray ,使用 paramarray 關鍵字可以提供任意數目的引數。paramarray 關鍵字不能與 byval,byref,或 optional 一起使用。

byref,表示該引數按地址傳遞。byref 是 visual basic 的預設選項。

paramarray 關鍵字用於下列語句:

declare 語句

function 語句

sub 語句

使用 paramarray

關鍵字可以使函式接收數目可變的引數。在下面的定義中,firstarg 是按值傳遞的。

function calcsum(byval firstarg as integer, paramarray otherargs())

dim returnvalue

'如果用如下**呼叫該函式:

returnvalue = calcsum(4, 3 ,2 ,1)

'則區域性變數被賦予以下值:firstarg = 4,

'otherargs(1) = 3,otherargs(2) = 2,等等。

'假設預設陣列下界 = 1。

byref 關鍵字用於下列語句:

call 語句

declare 語句

function 語句

property get 語句

property let 語句

property set 語句

sub 語句

vb中cint與int區別,VB中CInt與Int區別

一 主體不同 1 cint 返回表示式,此表示式已被轉換為 integer 子型別的 variant。2 int 整數資料型別的資料 是表示某種數學整數 範圍的資料型別。二 處理過程不同 1 cint 將其四捨五入為最接近的偶數。例如,0.5 被四捨五入為 0,而1.5 被四捨五入為 2。2 int...

VB中怎麼區分賦值與等號,VB中if語句的條件裡的等號是表示「賦值」還是判斷等號兩邊是否相等。比如if a b 是把b賦給a

邏輯運算中就是等於號,否則就是賦值號。舉例如下 條件 判斷語句中 作為關係運算 比如 if x 2 then while x 2 until x 2 其餘語句中作為賦值 x 2x x 2 vb6.0中關於 號有以下幾類用法 1 比較運算子,用來比較表示式。比較運算子示例 本示例示範各種 比較運算子 ...

vb中dim stastic public有什麼區別

dim任何地方几乎都可以使用,用作定義變數的謂詞。dim定義的變數是臨時變數,隨用隨釋放static和dim一樣,但是隻要定義一次在這個變數的作用域中就不會再次重新產生變數,而是沿用老變數 也就是 一次定義,終身受用 public一般用於定義類等內部宣告變數的許可權 是否允許為外部訪問 dim 可以...