to:"吴文智"
你是什么机器?这个问题我再Win2000 WinNT Win98上都遇到过
应该和机器无关
你是什么机器?这个问题我再Win2000 WinNT Win98上都遇到过
应该和机器无关
解决方案 »
- VB多个窗体怎么同步移动位置?
- 【申请版主】“塞北雪貂”申请VB版“COM/DCOM/COM+”子版版主,请各位支持,谢谢。
- 请问时间是怎样比较的?
- 批量提取,批量保存的问题。
- VB中如何调用word对象?
- 怎么设计这样一个variant数组,在函数中返回,在另一个函数中解析?
- 急!有哪位高手知道,怎么把一字符串变量的值加到字符串里去。小弟不甚感谢!
- 一个查询的问题!!急
- 一个查询语句总是提示操作符丢失。请高手帮我看一下。高分送上
- 控件问题~!简单.谁来拿分?不够可加.
- 哪位大虾用过installshield做过vb的开发程序安装包?
- 当我点击DataGrid某一行某一列时,如何取得这一单元格的数据?另外我如何取得它是多少行多少列?
dim j as Integer
j=intTest
test j这里的j变量是由系统生成的,也就是说,你虽然用的是ByRef,但在这个函数调用中,改变的是一个零时由系统产生的变量,所以intTest本身并没有改变,所以就会出现上面的情况,所以要想学好编程一定要先打好基础,所以这道题你一定要给我分!!! ^_^
是否是因为函数的参数传递,实际上是参数地址的传递Private Sub Command2_Click()
Dim intTest2 As Long
Dim intTest1 As Long
Dim intTest3 As Long
intTest1 = 10
intTest2 = 10
intTest3 = 10
test intTest1
a = test(intTest2)
test (intTest3)
Debug.Print intTest1, intTest2, intTest3End SubFunction test(i As Long)
i = 20End Function
func1 param1
a = func1(param1)
func1 (param1)假如func1使用ByRef方式传参数
那么VB给我们的现象是
func1 (param1)这种调用方式相当于ByVal方式传递
前两种传递参数方式是我们希望的ByRef方式传递uguess似乎没有解决问题的根本,你说()表示取值,那么为什么a = func1(param1)仍然修改了param1?我现在对结果有了了解,但是为什么会这样,仍然不是狠明白
希望大家探讨,谢谢
test (intTest)
MsgBox intTest2、yangzhaoyu(老妖) 的程序写的是
a = test(intTest2)
test (intTest3)
Debug.Print intTest1, intTest2, intTest3这两种写法为什么会出现不同的结果呢?这是因为在 a = test(intTest2) 中的括号已不再是“取值”的做用了,就象“=”号,有时是赋值,有时是比较。
你的意思是说,test(intTest1)
这句话包含的意思是把intTest1的值“取”出来,而不管test是按照什么方法传递参数
也就是如果用test(intTest1)的方式调用的话,vb强制性使用ByVal的方法?
而a = test(intTest2)和 test test3
都是尊重test的传递参数方法?如果是这样,狠容易误导人啊
不是我的意思,这是MS的意思!
事实上,这就是VB的规则:就象我上面的例子,“=”号,有时是赋值,有时是比较,你能说这样“狠容易误导人”么?要知道在C里,这两种状态的符号是不一样的。可那又怎么样?那是C的规则阿,所以在VB中的规则是什么,你就得怎么用!
我把Function改成sub,结果就一致了。
如果把test(inttest)改成call test(inttest),结果也会正确。
对此我也感到很困惑。我认为这是VB的一个缺陷、或者说是一个未列入文档的功能。
感谢gender给我们提出了这个问题,我觉得微软专家应该来看一看这个问题。
在目前我认为如果使用函数而没有用到其返回值的情况下,应该使用CALL myfunction(arg1,arg2),避免使用myfunction (arg1,arg2)。
怎么有这么多奇怪的想法????
to bucher(bucher) 这并不是什么“VB的一个缺陷、或者说是一个未列入文档的功能”,这就是VB的规则!!!
在CALL myfunction(arg1,arg2)这种用法中,括号已不再是“取值”的做用了!
我建议所有对此有疑问的人仔细学习学习VB的基础概念把!另外,把Function改成sub,那个例子也不会“结果就一致了”。
想这种括号作为取值运算的情况,只有在只有一个参数的情况下。大家可以试一试,把上面的函数改写成:
Function test(ByRef i As Integer, ByRef k As Integer)
i = 20
End Function然后再写:
Private Sub Command1_Click()
Dim intTest As Integer
Dim k As Integer
intTest = 10
k = 10
test (intTest, k) '注意这一句
MsgBox intTestEnd Sub
这时候大家就会看到又提示说“错误:缺少“=”号”
为什么一个参数的时侯不会有这种错误呢?这就是因为在一个参数的时候括号是作为取值运算的!现在有很多的人都在用VB写程序,大家都说VB简单,如门快。对,这不错,但是有没有想过,仅仅用控件写个对话框,这并不是真正意义上的“懂VB”,要先打好基础!
首先说我用vb大约有4年时间,项目做了不计其数,从来没有考虑过这个问题
4年的编成时间,我先后使用了delphi、vb、java以及web开发的asp和jsp
今天谈到的问题,是我的一个朋友问我的,如果他不问,我想,我一辈子也不会去认真考虑到底是怎么回事。这也许就是uguess说的“没有好好学习基础概念”。我想我今后会注意的 :)uguess的说明,我认为我是理解了,但是,这同时也说明,vb在构造自己的语言表现形式的时候
还是欠思量,MS太注重简单,但是简单就会引起歧义,这是不可避免的。
所以,该明确说明的地方,就应该从语法上明确限制。uguess肯定是一位有丰富经验的程序员
你的理解,是通过你不断的实践中领悟的,现在我也基本上领悟了,希望大家也能够领悟。系统说我只能加20分,呵呵,只好都给uguess吧,谢谢uguess,也谢谢大家