vb.net过程

来源:百度知道 编辑:UC知道 时间:2024/06/23 00:24:38
写出下列程序的运行结果
Dim a%, b%, c%, msg$
Public Sub pc(ByVal a%, ByRef d%, ByRef b%)
Dim c%
a = a + 1
b = b + 2
c = a + d
msg = a & " " & b & " " & c & vbCrLf
End Sub
Private Sub Button1_Click……
a = 2 : b = 3 : c = 4
Call pc(a, b, c)
msg = msg & a & " " & b & " " & c & vbCrLf
MessageBox.Show(msg)
End Sub

答案写的是 3 6 6
2 3 6
和我做出来的不一样,麻烦哪位高手解释一下~!

可以看到PC()函数是这样定义的
Public Sub pc(ByVal a%, ByRef d%, ByRef b%).
ByVal是传递值 源数据不会被修改,你可以把这个值当作自己的局部变量来使用;ByRef是传递地址,源数据可能被修改,你对这个变量的操作将对你传入的那个变量产生影响,就像指针的感觉.
------------------------------------------------
而a,b,c初始化分别为2,3,4
a = 2 : b = 3 : c = 4
当调用PC()函数时
Call pc(a, b, c) ,此时,相当于call pc(2,3,4)
由于PC函数定义的时候,d,c是传递地址,可以改变,所以此时d=3,b=4,a不变,还是为2
所以执行以下计算的时候,
a = a + 1 =2+1=3(注意,执行这句操作的时候,在PC函数里面a的值改变了为3,影响PC函数中涉及到a的计算)
b = b + 2 =4+2=6
c = a + d =3+3=6
------------------------
最后按钮事件里面还有一个输出,
由于a在PC()函数里面是值传递,所以不会受到影响,故a=2;
b为一个局部变量,不影响,故b=3;
c=6
--------------
调试程序的时候看的有点乱了,也不知道我这样分析有没有错,你自己也看看吧,互相学习