精华内容
下载资源
问答
  • arr(1)为Signal名称,将其放入专门记录signal的数组SigArrMsgArr中,并记录个数 调试时总是出错,比如: 1.数组维度超限 2.类型不匹配 3.split返回值不能赋给arr 请问要怎么改能实现上面的功能? ``` ...
  • 再看第10行,对于过程B,它的参数传递方式使用了ByVal关键字(即传值) 对于ByVal(传值),参数tx根本就是不相关的两个变量。就如同两个人一样(以甲、乙为例),起初甲有两个苹果,然后甲告诉乙,你现在也有两个...
    1    Private Sub Form_Load()
    2            Dim x As Integer
    3            x = 2
    4            A x
    5            Debug.Print x
    6    End Sub
    7    Sub A(ByRef t As Integer)
    8            t = t - 1
    9    End Sub
    10    Sub B(ByVal t As Integer)
    11            t = t - 1
    12    End Sub
    13    Sub C(t As Integer)
    14            t = t - 1
    15    End Sub
    这是一个极为简单的Toy程序(呵呵,就是小玩具),不过他却体现了传值和传引用的巨大区别。
    第7、10、13行分别是一个过程,这些过程都实现了同一功能,即将参数t的值减一。
    在窗体的Load事件中,我们定义了一个变量x,然后调用第一个过程(A),注意到第7行中的参数列表中ByRef关键字,它代表传引用。
    对于传引用,参数t 和 x其实就是一个变量。就像人有大名也可能有外号的道理一样。现在对于变量x,它的大名是x,外号是t。那么t-1其实就是x-1.最后打印出来的结果是x-1=1.
    再看第10行,对于过程B,它的参数传递方式使用了ByVal关键字(即传值)
    对于ByVal(传值),参数t和x根本就是不相关的两个变量。就如同两个人一样(以甲、乙为例),起初甲有两个苹果,然后甲告诉乙,你现在也有两个苹果了,于是乙乐呵呵的拿着两个苹果去过程B中,过程B的作用是将乙的苹果数减一,那么最后程序所要打印的是甲的苹果数,显然,苹果数2。根本没发生变化。那么有的朋友会问,这时乙的苹果数是1吧。答案是错的。对于变量,它是有生命周期的(在编程中叫做变量的作用域)。上面的代码中,变量x的有效期从Form_Load事件激活开始,到End Sub(也就是这个事件结束时)为止。而变量t的有效期从过程的第一句开始,到End Sub为止。一旦超过这个有效期,变量的值就不复存在了。所以,如果想要打印出乙的苹果数,只能在使用该变量的过程中打印,超出这个过程对该变量的任何操作都是毫无意义的。
    展开全文
  • 按值传递(Byval)和按地址传递(ByRef)---参数传递

    千次阅读 热门讨论 2012-08-08 11:25:21
    按值传递  ②按地址传递 学到现在了,仔细想想还是很模糊,从开始接触C++中的参数传递,只知道有这么个东西,但你要是让我说明白,有点够呛,在编程序的时候呢都是记住了一些写法才不会出错,紧接着学习C语言,...

    在接触了这么多的编程语言后,似乎每个语言都要涉及到参数的传递,而参数传递过程中的两种传递方式:


    按值传递  


    ②按地址传递


    学到现在了,仔细想想还是很模糊,从开始接触C++中的参数传递,只知道有这么个东西,但你要是让我说明白,有点够呛,在编程序的时候呢都是记住了一些写法才不会出错,紧接着学习C语言,Java都是如此,最近由于学习的需要,我要进行VB的一些学习,对于这个似乎忽然理解了 下面就是我自己的一些理解,在此分享一下

     

     按值传递:在过程被调用时,传递给形参的是调用过程中的相应实参的值,形参与实参各占有不同位置的储存空间,被调用过程在执行过程中,改变了形参变量的值,但不会调用过程的实参值。


    按地址传递:就是当调用一个过程时,是把实参变量的内存地址传递给被调用过程的形参,也就是说形参与实参使用相同地址的内存单元。因此当在被调用过程中改变形参的值,就等于改变了实参的值。


    PS:其实我个人认为就像两个小孩,都有自己的家,按值传递的就像是一个小孩去另一个小孩家玩,玩一段时间还是要回自己各自的家,而他们俩的家却没啥联系,一点没变,还在那呢  而按地址传递呢,就像是假如其中一个小孩的家发大水啦,然后这个小孩无家可归了,于是被另外一个小孩家收留了,这个小孩带着自己东西去那个小孩家,这时两个小孩拥有的是相同的一个家,他们俩就有联系了,因为那个小孩的家换成另外一个了.(不知道举得例子是否恰当)

    指针相信学习编程的人都知道吧,那么看看下面的例子

      按值传递时,实质上实参a只是把一个副本传递给形参x,也可以直接理解为传递的结果是让x*2中的x的值等于10(即a的值),乘以2后再赋值(赋值不用解释吧)给x,即实际上w方法的运算并没有对a本身进行操作。所以调用w方法前后a值始终等于10,而w方法得到的结果是20


    按址传递时,实质上实参a是把指针(地址)传递给形参x,这个指针指向的地址的值即是10,此时a与x分别有一个指针同时指向10所在地址,即实际上w方法对a本身直接进行了操作(a自身参与运算)。所以调用w方法前后a值分别等于10和20,而w方法得到的结果是依然是20。


     

    在比如拿VB中的例子来说

     

    按地址传递

    Functionfun(x As Integer, y As Integer) As Integer
    x = x * y
    If x<> 0 Then
    fun = x
    Else
    fun = y
    End If
    EndFunction
    Private SubCommand1_Click()
    Dim a AsInteger, b As Integer
    a = 2
     b = 3
     Text1.Text = fun(a, b)
     Text2.Text = fun(a, b)
     Text3.Text = fun(a, b)
     Text4.Text = fun(a, b)
    End Sub

    下面是运行的结果,通过结果可以看出,这个是按值传递的, 每一次运算后a的值都在变化。




    按值传递


    Subtext(ByVal x As Integer, ByVal y As Integer)
    x = x * 5
    y = y / 5
    Print"x="; x, "y= "; y
    End Sub
    Private SubCommand1_Click()
    Dim a AsInteger, b As Integer
    a = 10
    b = 90
    text a, b
    Print"a="; a, "b="; b
    End Sub

    由运行结果可以看出,尽管x,y的值经过运算后发生了变化,但是a,b的值仍然没有改变,这就是按值传递的小例子,就像上面图解的那样,传递过去的只是一个副本,而本身没有发生任何变化


    通过例子的观察和理解相信不懂参数传递的你也会和我一样理解了吧

    展开全文
  • ByVal 与 ByRef(默认值) 这两个是子过程的参数传递时,指定参数按什么传递的 ByVal(按值传递) ByRef(按地址传递) 具体这样来理解: 过程中的参数列表,我们称形参 调用过程...

    ByVal 与 ByRef(默认值)
    这两个是子过程的参数传递时,指定参数按什么传递的
    ByVal(按值传递)
    ByRef(按地址传递)
    具体这样来理解:
    过程中的参数列表,我们称形参
    调用过程时的参数列表,我们称实参

    在调用时,我们要将实参的值传递给形参,这样过程才能拿这些数据参与计算并实现一些功能
    那么在传递的过程中,就存在这两种传递方式
    传值时(ByVal),是先给形参开辟一个临时地址,将实参的内容传入这个临时地址,这样,传递后,形参与实参是在两上不同的地址中,也就是说他们是相互独立的
    传址时(ByRef),是直接将实参的地址传递给形参,这样,形参与实参就共用一个地址,所以,形参内容的改变,也直接改变了实参的内容

    通过上面的分析,你只要记得:
    按值传递时(ByVal),形参的改变不会影响到实参
    按址传递时(ByRef),形参的改变,会影响到实参

    应用时,我们可以利用按址传递的过程,给一个子过程(Sub过程)进行参数返回

    例:
    Dim A as integer,B as integer
    A=1
    B=2
    Call AAA(A,B)
    Print A,B '得到的结果是2 3 (形参的改变影响到了实参)
    Call BBB(A,B)
    Print A,B '得到的结果跟上面的一样,2 3(形参的改变并没有影响到这个实参)


    Sub AAA(I as integer,J as integer) '默认,则按址传递
    i=i+1
    J=J+1
    End Sub

    Sub BBB(ByVal I as integer,ByVal J as integer)
    i=i+1
    J=J+1
    End Sub

    展开全文
  • vb6.0第五课

    2019-10-21 16:13:43
    二、参数按值和按地址传递VB中传递参数有两种方式:按值传递、按地址传递。其中按地址传递,又称为“引用”。 1、按值传递参数 按值传递使用Byval定义参数。使用时,程序为形参在内存中临时分配一个内存单元,并...

    一、参数
    1、 形参:出现在sub过程和function过程中。
    2、实参:调用参数时传递值
    在这里插入图片描述
    二、参数按值和按地址传递
    在VB中传递参数有两种方式:按值传递、按地址传递。其中按地址传递,又称为“引用”。
    1、按值传递参数
    按值传递使用Byval定义参数。使用时,程序为形参在内存中临时分配一个内存单元,并将实参的值传递到这个内存单元中。当过程中改变形参的值时,则只是改变形参内存单元中的值,实参的值不会改变。
    如:

    Private sub test( byval a as integer, byval b as  integer)
       A=a+20
       B=b+0
       Print “a=& a , “b=& b
    End sub
    
    Private sub cmdtest_click()
        Dim num1 as integer ,  num2 as integer
        Num1=10
        Num2=10
        Print “num1=& num1 , “num2=& num2
        Call test(num1,num2)
        Print “num1=& num1 , “num2=& num2
    End sub
    

    上述代码中,test过程中修改了形参a 和 b 的值,a和b是按值传递参数的,单击“cmdtest”后,形参a和b的改变没有影响实参num1和num2的取值。

    2、按地址传递参数
    按地址取值使用byref定义参数。在定义过程中,如果没有byval ,默认的是按地址传递参数。
    按地址传递参数,是指把形参变量的内存地址传递给被调用的过程。形参和实参具有相同的地址,即形参和实参共享同一段存储单元。
    Private sub test(a as integer, b as integer)
    ………. 别的都相同
    测试结果:形参a和b的改变影响了实参num1 和num2的取值。如下图所有 在这里插入图片描述
    按值传递参数、按地址传递参数应用场合,参考以下几条规则:
    (1)对于整型、长整型或单精度参数,如果不希望过程修改实参的值,则采用传值方式。而为了提高效率,字符串和数组应采用传地址方式。此外,用户定义的类型和控件只能通过地址传送。
    (2)对于其他数据类型,可以采用两种方式传送。但是建议此类参数最好用传值方式传送,这样可以避免错用参数。
    (3)用函数过程可以通过过程名返回值,但只能返回一个值;子过程不能过程过程名返回值,但可以通过参数返回值,并可以返回多个值。但需要子过程返回值时,其相应的参数要用传地址方式。

    数组参数:在定义过程中,用数组作为形参出现在过程的形参列表。语法如下:
    形能数组名() [As 数据类型]
    说明:实参列表中的数组不需要使用括号“()”,过程传递数组只能按地址传递,即形参和实参共有同一段内存单元。
    如:

    Private function average( age() as integer , n as integer )  as integer
      Dim I as integer, aver as integer, sum as integer
      For I =0  to n-1
         Sum=sum+age(i)
      Next i
      Aver=sum/n
      Average=aver
    End function
    
    Private sub command1_click()
      Dim employees()  as  integer   ‘定义一个用于存储员工年龄的数组
      Redim employees(6) 
      Employees(0)=20
      Employees(1)=28
      Employees(2)=30
      Employees(3)=24
      Employees(4)=25
      Employees(5)=35
      text1=average(employees,6)
    end sub
    

    上述数组employees作为实参传递给形参age,形参age需要改变数组的维界。因此实参employees必须用“dim employees() as integer”语句声明为动态数组。

    三、对象参数
    除了变量和数组作为实参传递给过程中的形参,VB还允许对象(如窗体、控件等)作为实参传递给过程中的形参。
    对象参数可以用引用方式,也可以用传递的方式,即在定义过程中,在对象参数的前面加byval.
    如下例为通过子过程objectena设置textbox和commandbutton控件不可用。

    Private sub objectena( obj1 as object , obj2 as object)
      obj1.enabled=false
      obj2.enabled=false
    end sub
    
    private sub form1_load()
      objectena text1,command1
    end sub
    

    四、嵌套过程

    sub mysub1()
    ...
    end sub
    
    sub mysub2()
       call mysub1
    end sub
    
    private sub form1_load()
    call mysub2
    end sub
    

    上述代码中,mysub2过程调用mysub1过程,而form1_load事件过程又调用了mysub2过程

    展开全文
  • vb.net和vb中api的区别

    2005-11-23 23:10:00
    1.vb6默认为按地址传递,而.net默认按值传递,要手动写上byref2.long改成integer如:Declare Function SHFileOperation Lib "Shell32.dll" Alias "SHFileOperationA" (ByVal lpFileOp As SHFILEOPSTRUCT) As longvb....
  • VB中Byvalbyref的区别

    2019-03-20 09:47:01
    简单来说Byval是传值,byref是传地址,ByVal :表示该参数是按值方式传递的。ByRef :表示该参数按引用方式传递。下面绿茶小编为大家详细介绍Byval byref的区别。 1、引用参数(ref)在可以作为引用参数在函数成员调用...
  • VB中的ByValByRef的区别

    千次阅读 2017-07-21 11:59:59
    ByVal是按值传递,形参的改变不会造成实参的改变。ByRef是按地址传递,形参的改变会造成实参的改变。这就像是其它语言中的引用传递一样,如php中的 &amp;$args举个例子:Module Module1 Sub Main() Dim i As...
  • 过程是构成程序的一个模块,往往用来完成一个相对独立的功能。...一.Sub 过程Sub 过程的参数有两种传递方式:按值传递(ByVal)和按地址传递(ByRef)。如下例:Sub password (ByVal x as integer, ByRef y as integ...
  • 熟悉按值传递按地址传递参数的特点 了解递归函数的执行过程 4.1 过程的概述 过程通常是指程序设计中的一段完整代码也被称为代码块此代码块通常能完成某一完整的操作程序模块的代码常常被分成若干过程采用过程的...
  • ByVal是按值传递 就是不改变地址里的变量值 而ByRef是改变地址里的变量值的 <br />ByVal传递的只是一个值 向一个地址传递一个值进去 而ByRef的形参实参共用一个储存单元 因为他们是...
  • ByValByRef有什么区别

    千次阅读 2007-05-05 13:43:00
    VB中ByValByRef有什么区别原理: byval 是按值传送,在传的过程中不会改变原来的值,仅仅传送的是一个副本, 而 byref 相反,从内存地址来说,后者是同一个内存地址 区别: 就是变量如果以ByVal传递给过程,过程里有...
  • Excel_VBA教程

    2014-09-22 11:36:34
    8.按地址和按值传递参数 97 9.使用可选的参数 97 10.定位内置函数 98 11.使用MSGBOX函数 99 12.MSGBOX函数的运行值 103 13.使用INPUTBOX函数 104 14.数据类型转变 105 15.使用INPUTBOX方法 106 16.使用主过程子...
  • 实例149 过程值传递参数 实例150 过程引用传递参数 实例151 不借助第3个变量实现两个变量互换 实例152 计算加权平均值 实例153 检查参数是否成功传递给用户自定义过程 实例154 使用递归过程实现阶乘运算 6.2 ...
  • 在一小时内学会 C#(txt版本)

    热门讨论 2009-08-19 18:09:37
    使用例程,简单却完整的探索 C# 语言的构造特点。本文特别适合有 C++ 基础却没有太多精力学习 C# 的读者。 关于作者 Aisha Ikram 我现在在英国一家软件公司任技术带头人。我是计算机科学的硕士。我主要使用 ...
  • 2.2.1 类型引用类型 69 2.2.2 基本类型 71 2.3 命令:条件语句 72 2.3.1 if then 73 2.3.2 比较运算符 73 2.3.3 select case 75 2.4 类型(结构) 75 2.4.1 布尔类型 76 2.4.2 整数类型 77 ...
  • 答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生) 30.简要谈一下您对微软.NET 构架下remotingwebservice两项技术的...
  • ASP.NET精品课程+源代码

    千次下载 热门讨论 2009-01-05 20:15:51
    随着改革开放的不断深入社会文化经济的持续发展,ASP.NET课程发展也经历了一个教学理念的不断更新、升迁,教学内容日益丰富,教学方法手段逐渐完善,教学条件环境更加优化的过程。我校ASP.NET课程根据社会发展...
  • 2.2.1 类型引用类型 69 2.2.2 基本类型 71 2.3 命令:条件语句 72 2.3.1 if then 73 2.3.2 比较运算符 73 2.3.3 select case 75 2.4 类型(结构) 75 2.4.1 布尔类型 76 2.4.2 整数类型...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    18.2 在 C #代码中调用 C++ VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...
  • C#微软培训资料

    2014-01-22 14:10:17
    18.2 在 C #代码中调用 C++ VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...
  • 本书是第II卷,以开发人员在项目开发中经常遇到的问题必须掌握的技术为核心,介绍了应用Visual Basic进行程序开发的多方面的知识技巧,主要包括Visual Basic的多媒体开发、数据库应用、网络技术与Web开发、安全...
  • 本书是第II卷,以开发人员在项目开发中经常遇到的问题必须掌握的技术为核心,介绍了应用Visual Basic进行程序开发的多方面的知识技巧,主要包括Visual Basic的多媒体开发、数据库应用、网络技术与Web开发、安全...
  • 后面是IDE设备的类型硬件参数,TYPE用来说明硬盘设备的类型,我们可以选择AUTO、USER、NONE的工作模式,AUTO是由系统自己检测硬盘类型,在系统中存储了1-45类硬盘参数,在使用该设置时不必再设置其它参数;...
  • 6) 修改MYSQL支持库跨静态编译的EXEDLL传递连接句柄记录集句柄无效的BUG(改动较大,可能会产生兼容性问题,我们已经仔细测试,也请使用到此库的用户帮助我们多多测试,以便及早发现问题,谢谢) 7) 其它修改 ...
  • 但是URL重写,并且,将一个带假目录的虚拟地址重写到一个不带假目录的页面时,由于浏览器客户端服务端此时的当前页面计算方法是不同的,就会发生相对路径的匹配错误问题!真实很严重的问题啊! 解决的办法,只有...
  • 子程序 取寄存器, 文本型, 公开, 适用于明码读码,运行到地址处读真码;如 取寄存器(文件名,"user32.dll",“CreateWindowExA”,Hex2Dec (“00401000”),“Eax”) .参数 文件名, 文本型, , 文件全路径 ....
  • Java开发技术大全(500个源代码).

    热门讨论 2012-12-02 19:55:48
    invokeByObject.java 对象实参传递示例程序 invokeByValue.java 传值调用示例程序 invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 invokeStaticMethod.java 调用静态方法...
  • Congratulate //表示成功,并传递值yes (可用) Decline //摇着头,表示不知道的时候用。(可用) DoMagic1 //施放魔法动作1 (可用) DoMagic2 //施放魔法动作2 (单独可用,也可1,2连用) DontRecognize //...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

vb按值传递和按地址传递