VB形参,实参问题
发布网友
发布时间:2023-09-12 18:15
我来回答
共3个回答
热心网友
时间:2023-09-21 21:15
这个不是什么形参和实参的区别。是参数传递类型的问题。你的Fun函数中,两个形参x,y都是传址传递变量。
那么fun(A,A),这里的A就是实参,这里A传递给两个传址传递参数x和y,那么x和y都会直接访问并修改A的内存地址的数值。这个就是传址传递参数的最大作用。
那么A内存地址的值改变了,A也就改变了。
需要注意的是,两段程序里面的K两者之间没有任何关系,分属于两个程序的局部变量。
那么再回到你的函数调用:K= fun(A,A) + fun(A,A)
第一个Fun(A,A),首先进行x = x + y的运算,因为X,Y都直接访问了A的地址,所以X,Y的值期初都是1。然后经过x = x + y 的运算,也就是x = 1 + 1,那么这个时候x =2,而X是传址传递,他直接修改了A地址的值,也就是A也变成了2,而y也访问的是A地址,所以这个时候A,X,Y的值都是2,实际上他们都是A地址的值。
那么再运行Y= Y+K,这里的K就是一个普通局部变量,他前面没有任何赋值,所以K就默认为0,所以Y= 2 + 0,所以Y还是2,也就是A,X,Y的值没有任何变化。
而fun = x + y = 2 + 2 = 4。
此时print fun;x;y 就是 4,2,2
而第二个fun(A,A),此时A的值已经变成了2,那么x = x + y = 2 + 2 = 4 ,于是A,X,Y都变成了4,后来fun = 4 + 4 = 8,于是print fun;x;y 就是 8,4,4
而K = 4 + 8 = 12
所以,最终结果就是:
4,2,2
8,4,4
12
热心网友
时间:2023-09-21 21:16
A=1
那么第一次调用fun(A,A)时
x=x+y=1+1=2
y=y+k=2+0=2
k=k+x+y=0+2+2=4
fun=x+y=2+2=4
所以 print fun;x;y 的结果是 4 2 2
注意这时候A的值是2,fun函数的返回值是4
接下来第二次调用fun(A,A)时
x=x+y=2+2=4
y=y+k=4+0=4
k=k+x+y=0+4+4=8
fun=x+y=4+4=8
所以 print fun;x;y 的结果是 8 4 4
注意这时候A的值是4,fun函数的返回值是8
那么 k=fun(A,A)+fun(A,A)=4+8=12
则 print k 的结果就是 12
把上述所有输出结果连起来就是
4 2 2
8 4 4
12
热心网友
时间:2023-09-21 21:16
可以看看我在百度空间里的文章:
VB6 当中自定义过程和函数的参数类型