vb中的数值问题

为何在执行x=x+y前,y=1,执行了之后y=2,这里是对x进行赋值,为什么y也会变化。

闲来没事,解释下此程序。A=1:K=fun(fun(A,A),A)。
所以先求括号内的fun(A,A).
这是第一次调用fun(1,1),注意函数内的K是静态的,不会影响到主程序中的K(屏蔽作用)。
函数内,开始:k=0;
K=K+X+Y //K=0+1+1=2
X=X+y // x=1+1=2
Y=Y+k // y=1+2=3
fun=x+y //fun=2+3=5即返回值是5.
Print fun; x;y //输出第一行:5 2 3
fun(1,1)=5代入:k=fun(fun(a,a),a)就是求:K=fun(5,1) 注意此时实参: X=5,Y=1
因为K为静态变量,所以这时k还是为2.要特别注意的。所以
K=K+X+Y //K=2+5+1=8
X=X+y //x=5+1=6
Y=Y+k //y=1+8=9
fun=x+y //fun=6+9=15即返回值是15.
Print fun; x;y //输出第二行:15 6 9
所以主函数中 K=fun(fun(A,A),A) 得K=15(函数内的k 与此无关)。
第三行:K=15
供参考,祝顺利。追问

谢谢你这么认真的回答,我的答案也是这样,可是把这些代码输入vb中运行,第一行是 8 4 4,第二行是 30 12 18 第三行 k=30

追答

是呀。在vb和excel的vba中都调试过正如您所说。也不理解。很遗憾。

调试中加如图一行,结果是正确的。

再用kk=fun(a,a),结果为:844.

想了下,vb中函数用变量做参数是传址?如果是这样就可以解释了。a就是X,a就是Y.它们是同一个地址。

您再添加一个监视变量a就可理解了

又百度了下。有这样一段文字:在vb中调用函数或过程,传递参数都有两种方式——传址和传值。其中VB默认是以传址方式传递参数。

也借您的问题学习了。

追问

感谢感谢,明白了。不知道能不能留个QQ,快二级考试了,希望向你多学习学习。

追答

vb也没专门学过。可能不能帮到您。只是前年自学C++参加二级考试侥幸得了个优。平常不用就全忘记了。偶尔统计用vba所以做了个解释还是错的。怎么敢交流?我怕怕。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-02-22
x=2 y=1没毛病,y的值哪里有变化了?追问

我在vb里输入了这段代码,y在x=x+y执行了之后,变成了2

相似回答