c++ - vb 中形参 实参 ByVal ByRef 有什么实例?
天蓬老师
天蓬老师 2017-04-17 14:28:22
0
3
885

编程业余爱好者..

我也百度搜了,但是说的我也看不明白,都是专业属于...

别鄙视我,给我举个简单的例子呗.

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(3)
PHPzhong
Sub Foo(ByVal p1, ByRef p2)
  p1 = 9
  p2 = 9
End Sub

Dim a As Integer
Dim b As Integer
a = 1 : b = 2
Foo(a, b)
' 此时 a 的值不变,仍为 1
' b 的值变为 9

這裡「形參」就是p1p2,「實參」就是ab
呼叫Foo時,系統把a複製了一份傳給p1,因此改變p1的值不影響a。而p2代表對b變數的引用,改變p2也會讓b變化。

好久不寫 VB 了,有錯還請各位指正。

小葫芦
Sub Foo(ByVal p1, ByRef p2)
  p1 + p2
End Sub

形參就是預設的可傳入參數,Foo 聲明了接受兩個參數,p1 和 p2。這時候其實p1 和 p2只是理想狀態,並不是實際參數,所以叫形參

Foo(1, 2)

呼叫Foo的時候傳進去兩個實際的,有意義的參數,1和2是實際參數,所以叫實參

迷茫

先弄清楚形參和實參,形參是定義函數時括號裡的參數,實參就是使用這個函數時實際上往裡傳入的參數。
再弄清楚,變數是存在記憶體裡的,每個變數會有屬於自己的一塊獨立的記憶體空間,每個記憶體空間又有位址,透過位址能找到這塊記憶體。
然後看這兩個英文的意思,ByVal:按值傳遞,ByRef:按地址傳遞。
什麼是按值傳遞呢?就是先給形參開闢一個新的記憶體空間,將實參的內容傳入這個新的記憶體空間,這樣傳遞後,形參與實參是在兩個不同的記憶體空間中,也就是說他們是相互獨立的,你在函數中怎麼折騰這個形參,折騰的都是這個臨時記憶體空間,和實參沒關係,它靜靜的躺在自己的小屋裡。
什麼是按地址傳遞呢?就是直接將實參的內存空間位址傳遞給形參,這樣,形參與實參就共用一塊內存,所以,形參內容的改變也直接改變了實參的內容,你在函數中折騰形參,等同於折騰實參。
所以一般情況下,函數都會有個返回,因為函數預設都是按值傳遞,如果不返回,這個函數執行完,那些臨時記憶體空間就釋放了,執行半天啥也沒了,當然,如果你定義了按地址傳遞,那就無需返回了。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板