1樓:網海1書生
打個比方:
byval 就像是你給別人100塊錢,這100塊錢給了他之後就基本上跟你沒關係了,他怎麼使用都不再會影響到你的剩餘財產。這就是傳值呼叫,即傳遞的只是引數的值,函式內部對這個值所進行的任何修改都不會改變該引數呼叫前的變數值(就好比相同名字的兩個人,你打其中一個人的臉,另一個人的臉並不會疼,對吧?)。
而 byref 就像是你把自己的銀行賬號和密碼告訴別人,那麼別人隨時可以從中取錢、存錢、查詢餘額等,也就是說他的操作可以直接改變你的財產數值。這就是傳址呼叫,即傳遞的是引數的記憶體地址,函式內部只要修改了這個地址中的內容,那麼引數呼叫前的變數值也會跟著改變(就好比同一個人有不同的兩個名字,那麼不管是按哪個名字打臉,疼的都是他對吧?)。
vb中byval與byref有什麼區別
2樓:大野瘦子
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
3樓:匿名使用者
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
4樓:匿名使用者
精彩回答 下面 按值傳遞 結果是錯誤的昂 ab值不變 按值傳遞的話依然是1和2
5樓:匿名使用者
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
6樓:匿名使用者
h是byval,j是預設的byref
7樓:匿名使用者
byval(按值傳遞)
byref(按地址傳遞)
8樓:
byval是值傳遞;byref是地址傳遞。在交換函式裡單純交換值時沒有效果的,需要交換對應的地址。
主要區別:
1、引用引數(ref)在可以作為引用引數在函式成員呼叫中傳遞之前,必須已明確賦值,而輸出引數(out)在可以作為輸出引數在函式成員呼叫中傳遞之前不一定要明確賦值,在該函式成員正常返回前都必須已明確賦值。
2、在函式內部,引用引數(ref)被視為初始已賦值,輸出引數(out)被視為初始未賦值。
3、預設地,vb中的所有引數都是值傳遞。只有在引數的修飾符中明確包含out或ref,才是引用傳遞。但是需要知道的是,當引數的型別是引用型別時,你傳遞的是一個物件的引用而不是實際的物件。
vb中byval和byref指定的傳值和傳地址到底是指什麼意思啊
9樓:檢甘謝米雪
這個我會,剛學不久,跟樓主握個爪先,你好你好;-)。望文生義,byval就是傳值的意思,byref就是傳地址的意思。byval意思如下:
本來a等於10,一個函式a=2*a,如果a是byval,但是運算完函式後,a還是等於10的。如果是byref的話,運算完a就等於20了。。意思就類似我有白紙鎖在保險櫃裡面(相當於a存在計算機記憶體裡),如果是byval的話,就相當於給個影印本你,你怎樣塗寫是你的事情,我鎖在保險櫃的白紙仍然是白紙。
而byref是直接讓別人在你保險櫃的白紙上塗寫,所以就會改變。懂了嗎?
用手機打字真累,望採納,不行請追問
vb中,byval和byref的用法有什麼區別啊?具體能舉個例子嗎?困惑~~~
10樓:匿名使用者
二樓正解!一樓的函式過程需要最後把引數賦值給函式名的…少一句賦值**,其他沒什麼問題!建議樓主看下關於sub過程與function過程的講解,不算難!!
11樓:匿名使用者
(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傳,因為他們不是一個值,是一組值,一組值就只能傳記憶體地址了。
12樓:匿名使用者
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什麼區別,什麼時候要用什麼時間不用我搞不清楚求解答。。。最好舉個例子
13樓:郝振楠
直接的說:
byval:將引數按值傳遞。即a=b,但不可以b=a,(只能將實參傳遞給形參)為單向傳輸。
如果實參為常量或表示式,則預設為值傳遞。如果實參為變數,卻想按值傳遞,則需要在變數前加上關鍵字byval,或將呼叫過程語句的實參中的變數括起來。
例子:private sub exam (byval x, y, z)
x=x+2
y=y-3
z=z^2
? x, y
end sub
private sub form_activate()dim a%, b%, c%
a=1: b=2: c=3
? a, b, c
call exam(a, (b), c)
? a, b, c
end sub
執行結果為:
1 2 3
3 -1 9
1 2 9
解釋:上面例子中定義過程語句中的形參x前加上byval,呼叫該過程的語句中的b被括起來。
所以在運算中,ab為按值傳遞(單向),c為按地址傳遞(雙向)byref與之相似
如還有疑問,可說明問題
[email protected](郝振楠)
14樓:網海1書生
byval是傳值呼叫,比如變數a把自己的值傳遞給變數b,b獲得的只是a的值,本質上它們是兩個不同的變數,只不過它們的值相同而已,而改變b的值並不會影響到a的值;
byref則是傳址呼叫,變數a把自己所在的記憶體地址傳遞給變數b,這時候a和b所指向的記憶體地址是一樣的,所以實際上它們相當於同一個變數,只是名字不同而已(如果處在不同的作用域那麼也可以同名),改變b的值那麼a的值也會跟著改變!
15樓:匿名使用者
byval 的全稱 by value,突出在value上,就是傳值byref 的全稱 by reference,突出在 reference上,就是傳址
如果一個函式的引數使用byval修飾,則在函式內部修改了這個引數的值的時候,在呼叫這個函式時在該引數位置的變數的值從未改變。
如果用byref修飾,則在函式內部修改這個引數的值的同時,呼叫的變數的值也會同時改變。
在VB中畫線(急!),請問,VB中可以畫線的粗細和指定畫出的線是什麼顏色嗎?
1 繪製線表後肯定要先找到這兩個控制元件。2 然後在這裡先畫上x和y兩軸線。4 接下來,用標籤輸入這兩個標誌。4 在使用這個形狀按鈕繪製。5 一個個畫過去線條就可以了。注意事項 vb可以輕易的使用dao rdo ado連線資料庫,或者輕鬆的建立active x控制元件,用於高效生成型別安全和麵向物件...
在vb中什麼叫標籤,什麼叫控制元件,在VB中什麼叫標籤,什麼叫控制元件?
在標籤的cilck事件中寫上 就可以點選了。private sub label1 click msgbox 點我 end sub 在圖形使用者介面 gui 中螢幕上的一種物件,使用者可操作該物件來執行某一行為。控制元件是使用者可與之互動以輸入或運算元據的物件。控制元件通常出現在對話方塊中或工具欄上。...
VB中FORMAT是什麼意思,在VB中,Format 是什麼意思,怎麼理解的?
format是cstring類的一個成員函式,它通過格式操作使任意型別的資料轉換成一個字串 datetime是時間型別。返回值是一種格式化後的字元,format裡面可以寫普通的字串,比如 my name is 但有些格式指令字元具有特殊意義,比如 6s vb格式輸出函式可以使數值 日期或字串按指定的...