求解VB一道题,二级在即,急求!!

2025年03月01日 10:55
有5个网友回答
网友(1):

Private x As Integer,Private表示变量x只能在本form里使用,其他窗体不能调用;Private x As Integer写到其他过程之外,说明其作用域是整个窗体;作用域,就是一个变量的生命周期,从定义到消失的代码区间,例如:
Private Sub Command1_Click()
Dim x As Integer 'x 出生了。另外注意:过程里不能用private,要用Dim
x = 5
y = 3
Call f1(x, y)
Print x; y
End Sub 'x死亡了,x只在这个区间“活着”,程序可以访问
为什么会有这种输出? 先考虑有Private x As Integer的情况
首先要明白两个问题:(1)参数传递原理,简单点讲吧,程序执行到Call f1(x, y),转向执行Private Sub f1(ByVal a As Integer, ByVal b As Integer),这里面的x是private...那个x,这个x的作用域是整个窗体;而这里的y是新产生的变量,作用域只在该过程里,出了过程就消失了,那么,没看到这里Dim y...啊,是的,这就是第(2)个问题,vb里可以不定义使用一个变量,Dim可以省略,但是,如果你在窗体代码的开始加上Option Explicit,Dim就不能省略了,该语句强制要求变量使用前要定义。不写Option Explicit,默认可以省略Dim。接着看流程,程序执行完了Private Sub f1(ByVal ...后,返回到Private Sub Command1_Click(),执行下一条Print x; y,这里的x就是Private Sub f1里的x,是25,但此处的y是Private Sub Command1_Click()里的y,是3

如果不写Private x As Integer,
Private Sub f1(ByVal a As Integer, ByVal b As Integer)
x = a * a
y = b + b
End Sub
里面的x,y是在这里新产生的,到End Sub就消失了,在Private Sub Command1_Click()里输出的x,y就是在这里面的x,y,5和3

网友(2):

Private x As Integer
写在前面是表示x是一个全局变量,这样的话在Private Sub Command1_Click()和Private Sub f1(ByVal a As Integer, ByVal b As Integer)里面处理的x都是一个变量。
所以在Private Sub f1(ByVal a As Integer, ByVal b As Integer)处理中会实际上把x这个值修改了。如果不写的话,Private Sub Command1_Click()和Private Sub f1(ByVal a As Integer, ByVal b As Integer)里面的x分别是各自函数的局部变量,所以在Private Sub f1(ByVal a As Integer, ByVal b As Integer)中对x的处理不会影响Private Sub Command1_Click()里面的x的值。

网友(3):

Private x As Integer
Private 声明模块绷私有变量,在那个位置用dim x as integer是一样的。

如果你不加它,
Private Sub Command1_Click()
End Sub
中的x是command1_click中的局部变量与过程f1的计算结果无关,
你打印是此局变量x的值所以是5,而过程f1中的私有变量x是25,
也就是说你不加它,两个过程中的两个x是两个局部变量,互无关系。
如果你加了它,两过程中的x就是一个变量了,所以回返回25。

网友(4):

x在函数外面,是全局变量,不管你在哪里改了,它的值都变了。
y是作为参数传入函数,而且这里是值传递的,函数里面随便怎么整,对外面的值一点影响都没有的。

再解释一下,f1里面的y和Command1_Click里面的y根本就不是同一个东西,
这里没报错是因为没有强制要求变量声明,否则f1里会报错,说y没有定义。

网友(5):

X 和 Y 都是局部变量
Command1 和Sub f1中的x 并不是同一个变量

这是vb参数传递的基本知识

不加Byval 默认的是Byref

Byref 是传址,就是把变量的地址传送给函数,在函数的内部对参数的修改,实际上是对变量地址里的数据修改,所以当函数返回的时候,传进来的变量也是跟着改变的

Byval 是传值,顾名思义,就是把变量的数据传给函数,函数内部对其做任何处理都不会影响变量本身的值

举个简单的例子

如果你写一个函数,想让它返回两个或更多值,你就用传址的方式,在函数内部对参数的修改,返回之后,你传进去的变量,不就有新的值了吗(还有其他用法,我在这就不说了)