一道vb编程的题!!!

Function Fun (x as Integer,byval y as Integer) as integer
x=x+y
If x<0 Then
Fun=x
Else
Fun=y
End If
private sub command1_click()
Dim a as integer,b as integer
a=-10:b=5
Text1.text=Fun(a,b)
Text1.text=Fun(a,b)

为什么最后显示text1=-5,text2=5 ,代码中的if x<0.中的x指的是x=x+y中等号左边的还是右边的x? 题中的byval是怎么体现的? 请具体解释一下代码的意思! 谢谢!!
不好意思,最后是
Text1.text=Fun(a,b)
Text2.text=Fun(a,b)

Function Fun (x as Integer,byval y as Integer) as integer
x=x+y
If x<0 Then
Fun=x
Else
Fun=y
End If
在上面的函数里X是BYREF形式传递,也就是地址传递,在这种模式下, 在函数中 X值的更改 同时会更改作为参数的A的值
if x<0.时 =是一个左运算函数 也就是 先计算左边的运算结果(x+Y)后 再把X+Y的值给X
private sub command1_click()
Dim a as integer,b as integer
a=-10:b=5
Text1.text=Fun(a,b) 第一次传递后 a的值为-5
Text1.text=Fun(a,b) 第二次传递时 a的值在函数运算后为0 所以返回结果为Y的值追问

您说的第二次传递时 a的值在函数运算后为0那题中应该是byval x as Integer,而为什么是byval y as Integer啊 也就是说第二次传递时a为什么是-5 而不是-10, b还是5呢?

追答

参数传递两种方式
BYREF 默认 过程在运算中会更改参数的值
BYVAL 过程在运行中不会更改到参数的值
你的过程里
Function Fun (x as Integer,byval y as Integer) as integer
Y是以Byval的形式传递 ,所以调用Fun(a,b) 时
b所以不管调用多少次都值都是不变的
而X是以默认的BYREF型式传递 在Fun(a,b) 时 a 的值会改变 且每执行一次函数会加上一次b的值
而如果你将函数改成Function Fun (byval x as Integer,byval y as Integer) as integer
那么函数的结果都会是-5

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-14
首先,函数调用的两种传递方式,按地址byref是默认的,这里的x是按地址传递的值,于是,在函数中改变了x的值,对函数外过程有效。
第一次执行该函数,返回改变了的x值-5,也就是对应的a值已经改成-5.
第二次的a已经是-5了,在函数中x,也就是a,变成了0,此时输出y,b的值5.
在这个例子中,形参y没有在函数里改变值,byval有没有一样的。
主要是x,如果加上byval,在第一次执行函数时,虽然x变成了-5,但是a值是不变的。那么两次的结果就一样了。追问

x前如果加上byval那么两次的结果就都是-5了吧?

第2个回答  2012-02-14
1、关于结果:a初值为-10,b为5,带入函数中x=-10+5=-5<0,所以text1=-5没有问题;接下来是text2的值,此时a的值为-5,b的值为5,带入函数,x=-5+5=0,所以text2=y=5。
2、if x<0中的x是x=x+y左边的x。
3、byval的体现在该题中没有体现出来,你可以将x as Integer,byval y as Integer改为byval x as Integer,y as Integer来对比结果,就能看出效果。
4、代码的意思应该就是看byval的效果吧
第3个回答  2012-02-14
wcnmdadyts 已经说得很清楚了
第4个回答  2012-02-14
没有text2的代码啊??
相似回答