搜尋

首頁  >  問答  >  主體

c++ - vb 中形参 实参 ByVal ByRef 有什么实例?

编程业余爱好者..

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

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

天蓬老师天蓬老师2813 天前911

全部回覆(3)我來回復

  • PHPz

    PHPz2017-04-17 14:30:22

    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 了,有錯還請各位指正。

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 14:30:22

    Sub Foo(ByVal p1, ByRef p2)
      p1 + p2
    End Sub
    

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

    Foo(1, 2)
    

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

    回覆
    0
  • 迷茫

    迷茫2017-04-17 14:30:22

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

    回覆
    0
  • 取消回覆