精华内容
下载资源
问答
  • 作用: 将文件的每行放入lines()数组中; 行中是用空格分隔的,用split去除空格,放入arr()数组中 arr(1)为Signal名称,将其放入专门记录signal的数组SigArr和MsgArr中,并记录个数 ...调试时总是出错,比如: ...
  • 再看第10行,对于过程B,它的参数传递方式使用了ByVal关键字(即传值) 对于ByVal(传值),参数t和x根本就是不相关的两个变量。就如同两个人一样(以甲、乙为例),起初甲有两个苹果,然后甲告诉乙,你现在也有两个...
    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语言,Java都是如此,最近...

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


    按值传递  


    ②按地址传递


    学到现在了,仔细想想还是很模糊,从开始接触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的值仍然没有改变,这就是按值传递的小例子,就像上面图解的那样,传递过去的只是一个副本,而本身没有发生任何变化


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

    展开全文
  • VB过程中使用的参数分为实参和形参,...当调用一个有参数的过程时,形参和实参逐一匹配传递,根据传递方式不同,可分为按值和按地址两种。对参数传递方式的正确判别是过程学习中的一个难点,也是等级考试中的一个考点
  • VB几种函数参数传递方法,Variant,数组,... 按地址传递参数后,过程返回的也是地址,函数中改变了的变量值也将带回来。  2)ByVal 关键字指出参数是按值来传递的  按值传递参数时,传递的只是变量的副本。
    VB几种函数参数传递方法,Variant,数组,Optional,ParamArray 

    一) 过程的参数被缺省为具有 Variant 数据类型。
      1)ByRef按  地址传递参数在 VB 中是缺省的
      按地址传递参数后,过程返回的也是地址,函数中改变了的变量值也将带回来。

      2)ByVal 关键字指出参数是按值来传递的
      按值传递参数时,传递的只是变量的副本。如果过程改变了这个值,则所作变动只影响副本而不会影响变量本身。 

    二)使用不定数量的参数 ParamArray

      一般说来,过程调用中的参数个数应等于过程说明的参数个数。可用 ParamArray 关键字指明,过程将接受任意个数的参数。于是可以这样来编写计算总和的 Sum 函数:

    Dim x As Integer,y As Integer,intSum As Integer
    Sub Sum (ParamArray intNums ())
       For Each x In intNums
          y = y + x
       Next x
       intSum = y
    End Sub
    调用方法    Sum 1, 3, 5, 7, 8

    三)Optional 关键字,使用可选的参数
       Optional 关键字,就可以指定过程的参数为可选的。如果指定了可选参数,则参数表中此参数后面的其它参数也必是可选的,并且要用 Optional 关键字来声明。

    Dim strName As String,varAddress As Variant
    Sub ListText (x As String, Optional y As Variant)
       List1.AddItem x
       If Not IsMissing (y) Then
          List1.AddItem y
       End If
    End Sub

    调用1: Call ListText("yourname") '未提供第二个参数。
        2:  Call ListText("yourname",12345)
      在未提供某个可选参数时,实际上将该参数作为具有 Empty 值的变体来赋值。
      上例说明如何用 IsMissing 函数测试丢失的可选参数。

    四)Optional 声明arr()数组与Variant 方法
       通常用Optional  arr() as TypeName 为非法
       此时可声明函数变量为 Optional arr as Variant 
       调用时可使用Fun(arr()) 
    此时函数中可用LBound(arr)的UBound(arr)确定数组边界

    展开全文
  • vb函数参数的传递

    万次阅读 2005-06-16 12:18:00
    实际上,形参的完整的语法格式应该为:[[Optional][ByVal|ByRef]|ParamArray] > [()][As 类型>][=缺省值>]ByVal表示该参数按值传递,简称值参。此时形参与实参各占一个独立的存储空间,形参...ByRef表示该参数按地址

    实际上,形参的完整的语法格式应该为:

    [[Optional][ByVal|ByRef]|ParamArray] <变量名> [()][As <类型>][=<缺省值>]

    ByVal表示该参数按值传递,简称值参。此时形参与实参各占一个独立的存储空间,形参的存储空间是调用时才分配的。如果选择值参,则实参与过程体内的运算无关,它仍保留原值。因此,为了保护实参不受过程运算的影响,应选用数值参数。

    ByRef表示该参数按地址传递,称为变量参数,简称变参。此时形参与实参共同占用同一个存储空间,而实参的存储空间是调用前就分配了的。如果选择变参,则实参与过程体内的运算有关,形参的改变会影响变参的值。因此,当被调过程需要向调用方传递两个及两个以上的值时,应选用地址传递。由于变参是VB默认的传值方式,所以在此之前,很多地方我们使用的都是变参。

    需要说明的是:如果实参为常量,就是值参了

    值传递:传递值,传递后形参和变参脱离关系 形参可能变化,但不带给实参,属于“单向传递”。此时,形参一般是变量,实参可以为常数、变量、表达式。调用时为形参分内存。

    值传递:传递值,传递后形参和变参脱离关系 形参可能变化,但不带给实参,属于“单向传递”。此时,形参一般是变量,实参可以为常数、变量、表达式。调用时为形参分内存。

    地址传递:传递地址,形参与实参用的是同一个地址,形参的变化会直接带给实参,属于 “双向传递”。此时,形参、实参一般是变量或数组。

    Option Base 1

    Private Sub Command1_Click()

        Dim a(3) As Single, b(3) As Single, c(3) As Single

        Dim x As Single, y As Single

        Dim i As Integer

        For i = 1 To 3

            a(i) = Val(InputBox("请输入第" & i & "个方程的系数a:", "输入框"))

            b(i) = Val(InputBox("请输入第" & i & "个方程的系数b:", "输入框"))

            c(i) = Val(InputBox("请输入第" & i & "个方程的系数c:", "输入框"))

            Call root(a(i), b(i), c(i), x, y)

            Print "第"; i; "个方程"; a(i); "X^2+"; b(i); "X+"; c(i); "=0的根为:"

        Next i

      Print x, y

    Call oneline

    End Sub

    Public Sub root(ByVal a As Single, _

    ByVal b As Single, ByVal c As Single, _

                 x1 As Single, x2 As Single)//vb默认的是变参

        Dim d As Single

        Dim p As Single, q As Single

        d = b * b - 4 * a * c

        p = -b / 2 / a: q = Sqr(d) / 2 / a

        x1 = p + q: x2 = p - q

    End Sub

    Public Sub oneline()

        Dim k As Integer

        For k = 1 To 40

            Print "=";

        Next k

        Print

    End Sub

     

    说明:

    ⑴a、b、c、x1、x2为形参,a(i)、b(i)、c(i)、x、y为实参。

    ⑵其中a、b、c为值参,x1、x2为变参。
    关于函数传参ByVal与ByRef之间的异同点
    -------------------------------------

    首先,两种方式得到的结果毋庸置疑,肯定是一样的.

    使用ByRef传参会改变量本身的值,而ByVal则不会,因为ByVal仅仅是将变量的副本传递到函数中.

    那么使用这两种方式传参对代码的效率会有什么影响呢?我想,这是大部分程序员所关心的.

    在默认情况下,VB是按ByRef传递参数的,在一般情况下ByVal方式要比ByRef传递参数快,但当你要传递比较大的字符串或数组时,ByRef方式就要比ByVal方式快,因为ByRef仅仅需要传递指向数据的四字节指针,而不是实际的数据.所以,在进行应用的时候,可以考虑实际情况进行处理,以便达到最佳的运行速度.


    题外话:

    长整型变量(Long)是VB中最快的变量类型.
    在做运算的时候,如果不是必须要保留小数,尽量避免使用浮点运算,因为整数运算不需要使用数字协处理器.
    尽量避免使用对象的属性代替常量进行运算,针对于任何对象属性的访问都会影响运算的速度.
    尽量使用动态数组,而避免使用静态数组,因为通过Erase方法可以清空动态数组中不需要的元素并释放出占用的内存,而对于静态数组,只能将数组中元素的内容清空,并不会释放数组元素所使用的内存.

    展开全文
  • [color=red]byref:缺省方式,按地址传[/color],例如函数A调用函数B,按地址传递变量c作为参数,传递后如B在执行过程中改变c的值,则A中c的值也将改变为B执行后c的值。 [color=red]byval:按值传。[/color]例如函数...
  • vb6.0第五课

    2019-10-21 16:13:43
    VB中传递参数有两种方式:按值传递、按地址传递。其中按地址传递,又称为“引用”。 1、按值传递参数 按值传递使用Byval定义参数。使用时,程序为形参在内存中临时分配一个内存单元,并将实参的值传递到这个内存...
  • ByVal 与 ByRef(默认值) 这两个是子过程的参数传递时,指定参数按什么传递的 ByVal(按值传递) ByRef(按地址传递) 具体这样来理解: 过程中的参数列表,我们称形参 调用过程...
  • 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中Byval与Byref的区别。

    千次阅读 2018-11-17 11:21:04
    2.在程序中x是按值传递,而y是按地址传递,随后我们在程序中进行调用,因为在调用之前已经将z赋值为300,e赋值为400. 3.所以调用函数以后,按值传递的Z为300,而按地址传递的E则为200,e即使被赋值,因为它是根据...
  • ByVal 与 ByRef(默认值)这两个是子过程的参数传递时,指定参数按什么传递的ByVal(按值传递)ByRef(按地址传递)具体这样来理解:过程中的参数列表,我们称形参调用过程时的参数列表,我们称实参在调用时,我们要将实参的值...
  • VB中关于BYVAL含义

    千次阅读 2018-10-25 10:18:43
    若形参前含有byval 表示传递的方式,若没有则是引用或地址方式进行传递
  • VB中Byval和byref的区别

    2019-03-20 09:47:01
    简单来说Byval是传值,byref是传地址,ByVal :表示该参数是值方式传递的。ByRef :表示该参数引用方式传递。下面绿茶小编为大家详细介绍Byval 和byref的区别。 1、引用参数(ref)在可以作为引用参数在函数成员调用...
  • ByVal是按值传送,在传的...ByVal 与 ByRef(默认值)这两个是子过程的参数传递时,指定参数按什么传递的ByVal(按值传递)ByRef(按地址传递) 具体可看下面例子: Dim A as integer,B as integerA=1B=2Call fun01(A,B)Pr...
  • VB中的ByVal和ByRef的区别

    千次阅读 2017-07-21 11:59:59
    ByRef是按地址传递,形参的改变会造成实参的改变。这就像是其它语言中的引用传递一样,如php中的 &amp;$args举个例子:Module Module1 Sub Main() Dim i As Integer = 10 value1(i) 'ref1(i) de...
  • 第4章 过程与模块 本章学习目标 掌握事件过程 掌握Sub过程的定义与调用 掌握Function过程的定义与调用 掌握实际参数与形式参数 熟悉按值传递与按地址传递参数的特点 了解递归函数的执行过程 4.1 过程的概述 过程通常...
  • VB中Byval关键字的使用。

    千次阅读 2018-11-15 14:24:21
    也就是说,在定义通用过程时,如果形参前面有关键字ByVal,则该参数用传值方式传送,否则即以引用(即按地址)方式传递。 这里的形参x前有关键字ByVal,调用时以按值方式传递实参。 也就是说,外部的变量数值不会...
  • VB复习题试卷答案.。。。.下列用来求两个数的较大值的程序中,错误的是 。 2. 设计动画时,用计时器控件的 属性来控制... (C) 过程可以通过参数的地址传递向主调程序返回结果 (D) 过程不可能向主调程序返回结果
  • As 定义变量,比如dim a as long Binary 二进制方式读写文件 ByRef 按地址传递参数 Byval 值传递参数 Date 日期函数 Else 条件语句之“否则” Empty 表示“空” Error 错误对象 Input 读写文件的方式 Len 求字符串的...
  • 过程是构成程序的一个模块,往往用来完成一个相对独立的功能。...一.Sub 过程Sub 过程的参数有两种传递方式:按值传递(ByVal)和按地址传递(ByRef)。如下例:Sub password (ByVal x as integer, ByRef y as integ...
  • 按地址传递 6.Public x As Single 7.Static x As Integer 8.Form2.y 三、程序阅读题(写出下列程序的运行结果) 程序1. s = 2 程序2. 1 程序3. 1 1 2 1 1 2 1 2 2 2 2 3 s = 5 1 1 s = 9 1 2 1 1 3 3 1 1 4 6...
  • 有关监视窗口,这个主要是方便调试,里面显示的是后台的部分传递参数,包括当前歌曲使用的是哪一个备用地址等. g.有关歌手档案以及写真功能,播放歌曲时,如果激活这2个窗口将在线获取相应的信息,其中写真功能,点击缩略图...
  • 传递验证码图片数据或网络地址或本地图片路径,如果都不传递的话将识别库中的默认数据获取。 VB申明: Declare Function Recognition Lib "ycode.dll" Alias "Recognition" (ByVal ItemNo As Long, ByVal picin ...
  • .Net 下区别使用 ByRef/ByVal 的重要性

    千次阅读 2005-08-18 17:52:00
    一直以来在 VB6 下,参数默认都是按照 ByRef 传送的,(即按地址传送)而在 .Net(C# Ref,out ) 下, 参数默认是使用 ByVal (即按值传送) 传送的,变量的复本被传递.按地址传送参数是否会比 按值传递 更快呢,我进行了...
  • ByVal与ByRef

    热门讨论 2017-03-19 20:59:53
    一个是传递,一个是传递。。可是在函数调用的题中搞不太清楚了。。。 这是vb中传值与传址的参数修饰 Byval 是值传送,在传的过程中不会改变原来的值,仅仅传送的是一个副本,而 Byref 相反,从内存地址来...
  • 1、在“解决方案资源管理器”窗口中,选中要删除的窗体名,选择“从项目中排除”命令仍保留该窗体文件,仅从...3、vb.net中默认是地址传递”参数,可以省略 ByRef关键字。但是如果“实参”是一个表达式时,参数传递

空空如也

空空如也

1 2 3 4
收藏数 74
精华内容 29
关键字:

vb按地址传递