| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 712 人关注过本帖
标题:初学者-参数传递问题
只看楼主 加入收藏
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:909
专家分:5237
注 册:2015-8-10
  得分:4 
你这个代码并没有使用全局变量,a只是在commad1_click中有效, 调用f()函数的时候,实际上是将a的值赋给x, 所以a没有变化。
https://wenku.baidu.com/view/64946525cc7931b764ce1524.html 这个帖子说的比较清晰
2017-12-11 12:58
wds1
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:23
帖 子:250
专家分:1381
注 册:2016-3-10
  得分:4 
Function f(x As Integer)
Print "2 x", VarPtr(x), x
x = 5
Print "3 x", VarPtr(x), x
Print "4 f", VarPtr(f), f
f = x
Print "5 f", VarPtr(f), f
End Function

Private Sub Command1_Click()
Dim a As Integer
Print "1 a", VarPtr(a), a
Call f(a)  '或者 temp=f(a)  【问题出在这里,函数调用问题,所以地址值没有回传,具体的看打印结果】
Print "6 a", VarPtr(a), a
End Sub
call f(a) 或者 temp=f(a) 地址正确传送
1 a            1635046       0
2 x            1635046       0
3 x            1635046       5
4 f            1634856      
5 f            1634856       5
6 a            1635046       5
f(a) 地址没有传送【调用参数不正确,地址没有传送】
1 a            1635046       0
2 x            1635038       0
3 x            1635038       5
4 f             1634852      
5 f            1634852       5
6 a            1635046       0


[此贴子已经被作者于2017-12-11 22:13编辑过]

2017-12-11 22:04
肇励影
Rank: 2
等 级:论坛游民
威 望:2
帖 子:54
专家分:53
注 册:2016-8-5
  得分:4 
dim a as integer
这行代码声明了一个变量a,缺省值是0
下一行中的
f(a)
确实是调用了这个自定义函数,但是没有接收到返回值的变量。
简单点说,就是,在调用结束f之后,f(a)产生的返回值没有赋值给一个变量,所以此时a的值仍然是缺省值,即0。
在之后的语句中,
print a
和上面的代码没有关联,输出的a的值仍然是声明变量a时到的数值,也就是a这个变量的值前后没有改变,即0.。

而对于以地址传递的函数调用来说,我个人是这样理解的:
在f%(x%)中,虽然有
x=5
这样一行代码,但是由于实际参数和形式参数是不同的两个内存地址,也就是这两个变量互不干扰。
我觉得在这个调用过程中,变量地址之间数据的变化应该是这样子的:
=>f(a)
=>x<-a*
(此时x存储的是a的变量地址)
=>x=5
=>x<-5%
(此时x存储的是5,原先a的地址被替换掉了)

所以返回0。

2017-12-14 22:38







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019962 second(s), 9 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved