关于VB 静态变量的问题,朋友请进

来源:百度知道 编辑:UC知道 时间:2024/06/24 09:11:18
Option Explicit

Private Sub Command1_Click()
Dim a As Integer, b As Integer, z As Integer
a = 1: b = 1: z = 1
Call P1(a, b)
Print a, b, z
Call P1(b, a)
Print a, b, z

End Sub
Private Sub P1(x As Integer, ByVal y As Integer)
Static z As Integer
x = x + z: y = x - z: z = x + y

Print x, y, z

End Sub
这个程序里的SUB1里的x和y并不是静态变量,为什么在运算的时候是以上一次的值为基础的?
不是问你们关于传地址和传值,这个我懂,都不理解我的意思.

你没搞懂参数传递的两种方式,一种是按值传递(byval),一种是按地址传递(byref).
在VB6里的默认传值方式为按地址传递,也即是byref,所以你的SUB P1里的第一个参数就是按地址传递的.所以当你调用P1(a,b)时,传过去的a其实是a的实际地址,只是到了P1里就变叫x了.所以你在p1里修改x的值,也即是修改了a的实际内容.也就是说你在函数里改变了你传过去的第一个参数a的值,而第二个参数因为是按值传递的,所以没有这种情况.
不说了,自己慢慢再理解一下.

第1次A,B是形参,也就是X=A:Y=B
第二次是X=B:Y=A

x是传地址,因此运行后主程序中的值会改变。
y是传值,运行后主程序的值不变