vb编写代码完成无法运行我想请教哪里出了错误,callproc使用时运算步骤是如何进行的?

form对象和command1对象都是错误callproc 是使用时的运算步骤是如何推进的?
最新回答
上帝的女孩

2024-05-03 18:32:33

显然,你是想要了解byref和byval传值和传址两种传递的区别
不过你的代码错漏太多了,没有理解参数和传入参数到底是什么!
private sub command1_Click()
dim x as integer, y as integer '注意变量类型必须与参数类型相匹配
x = 5 : y = 8
call proc(x,y)
label1.caption = x
label2.caption = y
end sub
从上面的代码可以看出,你是想通过调用proc,期望通过proc改变x和y的值。那么,显然你的proc这个过程写法是有错误的。
public sub proc(byval a as integer,byref b as integer)
'我这里稍微修改了一下,a参数为传值,b参数为传址
a = a - b
b = a * b
end sub
那么这个时候的proc过程才有意思,command1_Click过程里面的两个变量x,y分别以参数a,b的形式传入到proc过程的时候,a因为是传值,那么a不能修改传入变量x的值,而b是传址,那么y传入到b的时候直接将内存地址传递给b,b的值变化,那么y的值也会跟随变化。
所以,最后我们得到
a = 5 - 8 = -3
b = a * b = -3 * 8 = -24
因为x是传值传递,所以x的值不受任何影响,而y的值跟随b变化,所以
Label1.caption = 5, label2.caption = -24

不过从你的代码来看,貌似仅仅只是模块级变量y与局部变量x之间的差别!
寄纸筏

2024-05-03 15:25:02

错误是要求对象,也就是说你代码用到的控件,在窗体上没有。
目测你的窗体少了一个label2
追问
proc可以作为一个单独的过程?   可以call?
追答
可以呀,不过你的代码有错误,看到评论了吗?
追问
看到了他可以作为一个后缀进程并紧急呼叫    好神奇,:)  label1显示内容为x x=a+b,a,b,值为传递递进值    为什么,y=5*8 x=5?