注册 登录
编程论坛 VB.NET论坛

关于 byval 和 byref 的 问题

m15093201628 发布于 2012-05-16 11:59, 651 次点击
程序代码:
Sub addref(ByRef one As Integer, Optional ByVal two As Integer = 18)
        one = one + two
        System.Console.WriteLine("one+two={0}", one)
     End Sub

    Sub Main()
        Dim a As Integer
        Dim b As Integer
        a = 10
        b = 20
        System.Console.WriteLine("调用add前,a={0}", a)
        addref(a, b)
        System.Console.WriteLine("调用add后,a={0},b={0}", a, b)
        System.Console.ReadLine()
    End Sub
只有本站会员才能查看附件,请 登录
为什么a和 b 都被 改变了呢,
 Sub addref(ByRef one As Integer, Optional ByVal two As Integer = 18)   two 已经 被我 用 byval 声明了,这是 为什么
3 回复
#2
m150932016282012-05-16 16:30
哎呀  自己 弄通了
#3
不说也罢2012-05-18 21:31
addref的参数two是可选参数,你在调用时赋值了
#4
hu_shangqing2012-06-06 12:15
你把程序改成下面这样,测试你就知道问题是出在 System.Console.WriteLine("调用add后,a={0},b={0}", a, b)

Sub addref(ByRef one As Integer, Optional ByVal two As Integer = 18)
        one = one + two
        System.Console.WriteLine("one+two={0}", one)
     End Sub

    Sub Main()
        Dim a As Integer
        Dim b As Integer
        a = 10
        b = 20
        System.Console.WriteLine("调用add前,a={0}", a)
        addref(a, b)
        System.Console.WriteLine("调用add后,a={0},  a)   'a=30
        System.Console.WriteLine("调用add后,b={0}", b)   'b=20
        System.Console.ReadLine()
    End Sub

1