VB中函数过程调用的问题 5

Functionf(a)AsIntegera=2f=5EndFunctionPrivateSubCommand1_Click()x=10y=x+f(x)PrintyEnd... Function f(a) As Integer
a = 2
f = 5
End Function
Private Sub Command1_Click()
x = 10
y = x + f(x)
Print y
End Sub
上面的程序为什么Y的值为2+5,而不是10+5?
下面这个Y的值为10+5,而不是2+5,两者有什么区别???请详解,多谢!
Function f(a) As Integer
a = 2
f = 5
End Function
Private Sub Command1_Click()
Dim x As Integer
x = 10
y = x + f(x)
Print y
End Sub
展开
 我来答
tianqing20wen

2019-02-15 · TA获得超过2.4万个赞
知道大有可为答主
回答量:8226
采纳率:88%
帮助的人:5075万
展开全部

因为你参数是传址类型 改变参数a 即改变带入时x变量的值 还有一个重点是y=x+f(x)中f(x)先执行所以x被改变后 才是 y=x+。。

更多追问追答
追问
谢谢,我终于明白了,但是第二个程序为啥是10+5,而不是2+5?
如果按着这种思路的话,好像又说不通
追答
楼下你说错了,按地址 或 按值 不是看你是否声明变量 或者 声明什么类型 传址和传值永远只看byval 和byref 不写就默认byref

第二个情况简单一点就是我刚才说的 一个表达式中 先计算谁的问题
syht2000
高粉答主

2019-02-15 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
区别就在于你前面的代码是没声明x就直接用,相当于x为Variant类型,Variant类型做为函数参数的时候,默认是按地址传值的,也就是说你在f(a)中对a的赋值会直接影响到原本的x,结果就是2+5,而后面是声明了int类型,这个默认是按值传递的。
为了避免这种情况,建议你在定义f的时候就直接写成Function f(ByVal a) As Integer,明确表明你是按值传递,这样你在f中对a的操作就不会再影响到原本传入的参数,同样无论你是否声明x,都会得到10+5
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式