| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
雷速体育发帖软件开发QQ118000023C语言培训|一对一辅导|零基础学编程LightningChart 快速先进的.Net图表控件
共有 627 人关注过本帖
标题:初学者-参数传递问题
只看楼主 收藏
初学者丶汇云
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-12-8
结帖率:0
  已结贴   问题点数:20  回复次数:12   
初学者-参数传递问题
语法不是规定,只要不是常亮和表达式,其默认不是都是地址传递的吗?
下面是一下程序为什么,输出会还是初始值?在窗体上只建立了一个按钮,为什么调用自定义函数,输出a的值还是0。不是地址传递的吗?
然后在print改成:print a, f(a) 在输出调用自定义函数的时候,a的值会改变,这是为什么?
初学者,谢谢大家回答,我实在想不通。谢谢
附件: 您没有浏览附件的权限,请 登录注册
2017-12-08 21:18
初学者丶汇云
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-12-8
  得分:0 
在线等
2017-12-08 21:18
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:76
专家分:47
注 册:2014-12-19
  得分:4 
Dim jj As Integer

Private Sub Command1_Click()
Dim a As Integer
cal (a)
Text1 = jj
End Sub

Private Function cal(x As Integer)
jj = 5
End Function
2017-12-09 09:52
初学者丶汇云
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-12-8
  得分:0 
回复 3楼 linandceline
你好,我想知道为什么按照我的代码改变不了a的值,不是默认地址传递的吗
2017-12-09 10:46
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:76
专家分:47
注 册:2014-12-19
  得分:0 
Dim a As Integer

Private Sub Command1_Click()
Text1 = cal(a)
Text2 = a
End Sub

Private Function cal( x As Integer)
x = 5 * 5
cal = 5
End Function
2017-12-09 12:00
初学者丶汇云
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-12-8
  得分:0 
回复 5楼 linandceline
谢谢您的回答,您的代码,可以改变a的值,不过我就是想知道为什么我那样调用就不可以,因为以后要考试,所以我想要搞清楚,谢谢
2017-12-09 14:41
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:76
专家分:47
注 册:2014-12-19
  得分:0 
应该是全局变量吧
2017-12-09 14:45
初学者丶汇云
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-12-8
  得分:0 
回复 7楼 linandceline
什么意思,我没有定义全局变量啊,我说我的代码为什么调用Function过程没有改变a的值,如果是地址传递的话,不是都会改变的吗
2017-12-09 18:44
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:212
帖 子:4209
专家分:25787
注 册:2008-10-15
  得分:4 
Private Sub Command1_Click()
Dim a As Integer
a = 0
f (a)
Print a

a = 0
f a
Print a

a = 0
Call f(a)
Print a

End Sub

Private Function f%(x As Integer)
x = 5
f = x
End Function


输出 0 5 5
就是
f(a)输出0
f a 输出5 ,与 标准格式 call f(a) 结果相同

结论是  f(a) 与 f a 不相同
我的理解:
f (a) ,这里 (a) 被当做一个表达式处理,先计算这个表达式后得到一个结果,然后这个结果按地址传递给了 函数。函数修改了值,但因为这个参数来自表达式,表达式的结果放在 临时变量里,用完就被丢弃了。
所以 f (a) 调用时,形参的修改,无法 反应到 实参上去。

------MSDN---------------
调用一个过程时,并不一定要使用 Call 关键字。如果使用 Call 关键字来调用一个需要参数的过程,argumentlist 就必须要加上括号。如果省略了 Call 关键字,那么也必须要省略 argumentlis 外面的括号。如果使用 Call 语法来调用内建函数或用户定义函数,则函数的返回值将被丢弃。





[此贴子已经被作者于2017-12-10 19:21编辑过]


授人于鱼,不如授人于渔
早已停用QQ了
2017-12-10 17:03
linandceline
Rank: 2
等 级:论坛游民
威 望:2
帖 子:76
专家分:47
注 册:2014-12-19
  得分:0 
回复 9楼 风吹过b
大神,解答一下我的帖子呗
2017-12-11 10:07







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

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