关于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并不是静态变量,为什么在运算的时候是以上一次的值为基础的?
不是问你们关于传地址和传值,这个我懂,都不理解我的意思.
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是传值,运行后主程序的值不变