精华内容
下载资源
问答
  • 再看第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的值仍然没有改变,这就是按值传递的小例子,就像上面图解的那样,传递过去的只是一个副本,而本身没有发生任何变化


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

    展开全文
  • 委托调用多线程传递参数vb.net vb.net多线程通过Deletgrate委托调用传递参数 实现多线程调用中变量参数的传入传出。 原创代码,亲测有效!
  • VB和VC 结构体Dll参数传递VB中的结构体作为参数,传递VC中的结构体dll
  • 之前我们看到用VB.NET调用Excel VBA的例子比较多,本次是使用VB.NET向Word VBA传递参数,并调用Word VBA生成Word报告或PDF文档。 在Word VBA中,可访问数据库,获得自己想展示的数据,灵活度比较高。 运行环境:VS...
  • VB急速屏幕传递

    2012-11-07 16:06:47
    VB编写的远程屏幕监控程序,传输速度快,并且有远程控制功能,值得下载。
  • VB调用VC 生成的dll里面的参数传递为结构体。
  • vb.net多线程传递参数,通过class类。可以实现超线程调用sub时,参数变量的传递 vb.net多线程传递参数,通过class类。可以实现超线程调用sub时,参数变量的传递
  • 有多种方法可以在窗口之间传递数据,比如: 1、在模块文件(Module)中声明一个全局公共变量,然后在其他窗体中就可以通过这个变量来存取数据了,如: 在模块文件中声明变量a Public a as string 在Form1中给a赋值 a...

    有多种方法可以在窗口之间传递数据,比如:

    1、在模块文件(Module)中声明一个全局公共变量,然后在其他窗体中就可以通过这个变量来存取数据了,如:
    在模块文件中声明变量a
    Public a as string
    在Form1中给a赋值
    a="您好!"
    在Form2中读取a
    msgbox a

    2、在要传递数据的那个窗口声明一个模块级的全局变量,然后在其他窗体中就可以通过这个变量(要加上窗体名的引用)来存取数据了,如:
    在Form1中声明变量a及赋值
    Public a As String
    Private Sub Form_Load()
    a = "你好!"
    End Sub
    在Form2中读取a
    msgbox Form1.a

    3、利用各个窗体中的控件属性来传递数据,如:
    让Form2的Label1的显示内容和Form1的Label1一样
    Form2.Label1.Caption = Form1.Label1.Caption

    展开全文
  • VB通过串口传递数据

    2011-06-18 18:26:13
    通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据
  • VB过程中使用的参数分为实参和形参,...当调用一个有参数的过程时,形参和实参逐一匹配传递,根据传递方式不同,可分为按值和按地址两种。对参数传递方式的正确判别是过程学习中的一个难点,也是等级考试中的一个考点
  • 简介:由于要开发一个软件,其中用com在VB与VC间传递结构体数组,在网上找了很久没有成功,后来在国外一网站找到了,并且按照其中的关键步骤操作成功了。由于原文是英文的,没有精力去翻译,于是用网页翻译了...
  • 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.NET>自定义控件传递事件

    千次阅读 2018-02-01 10:33:47
     WithEvents TextBoxPluss As TextBox 'WithEvent一个TextBox控件,因为自定义控件中需要传递的事件为TextBox的事件  Private Sub TextBoxPlus_KeyPress(ByVal sender As System.Object, ByVal e As System....
  • access服务器客户端源码,客户端可以发送查询给服务器,服务器把查询的结果发给客户端。不懂的MM我。
  • 本文介绍如何将数组从VC ++ DLL传递VB
  • VB与VC通过COM互传结构体数组,非常好的例子,在网上找了很久,相关资源很少,且都没有成功,最后在国外一网站找的,增加了简单测试,保证成功,首发CSDN
  • 关于VB的指针以及VB和C/C++间的参数传递

    千次阅读 多人点赞 2012-10-14 14:57:06
    首先,我们使用C/C++创建一个WIN32 DLL,这样VB才可以使用C/C++的代码。 此前我对DLL导出函数已有专文讲述,这里就不再赘述,当然为了各位能够去验证,我还是把步骤截图上来: 打开VC6,新建一个Win32 DLL工程...
  • VB传值地址问题

    千次阅读 2015-10-17 19:43:29
    传递参数时,分为Byval Byref 参数分为形参实参, 形参指的是过程名称中用括号括起来的参数, 实参指的的是调用过程中,向过程传递的数据参数。 可以理解为:形参相当于公式中的自变量,实参相当于使用...
  • 许多编程语言都有2种方法将参数传递给方法------按值传递和按引用传递。   与其他语言不同,Java不允许程序员选择按值传递还是引用传递各个参数,基本类型(byte--short--int--long--float--double--boolean--...
  • VB参数传递方式判别与解题应用[汇编].pdf
  • VB参数传递(传值ByVal与传址ByRef)[整理].pdf
  • VB编程:利用Object变量传递参数-21

    千次阅读 2016-11-21 15:14:39
    运行效果: 程序代码: Private Sub Command1_Click()  Dim i As Object  Set i = Text1  i.Text = "传递参数" End Sub
  • Variant输入出参数,ocx传递byte数组,safearray使用方法,vc写ocx在vb下调用
  • vb传递二维数组作为参数

    千次阅读 2018-01-03 09:55:00
    VB 中一个二维数组给一个函数作为参数,您可以参考以下代码: Private Sub Command1_Click () Dim abc ( 1 , 2 ) As Integer abc ( 0 , 0 ) = 1 abc ( 0 , 1 ) = 2 abc ( 0 , 2 ) = 3 abc ( 1 ,...
  • vb函数参数的传递

    万次阅读 2005-06-16 12:18:00
    实际上,形参的完整的语法格式应该为:[[Optional][ByVal|ByRef]|ParamArray] > [()][As 类型>][=缺省>]ByVal表示该参数按值传递,简称值参。此时形参与实参各占一个独立的存储空间,形参的存储空间是调用时才分配...
  • vb.net调用易语言dll,返回文本型参数不可用,通过内存读取进行文本型数据返回。 通过在易语言dll脚本中写入内存数据,然后在vb.net中读取指定内存数据来进行文本型字节集型数据交互。
  • C语言

    万次阅读 多人点赞 2019-12-18 23:01:50
    43.C语言允许直接访问物理地址,能进行位操作。 44.C语言是结构化程序设计语言 45.c程序要通过编译,连接才能得到可执行的目标程序 46.用c语言编写程序,可以编写出任何类型的程序 47.C语言允许有空函数 48.C程序...
  • .NET中的值传递与引用传递

    千次阅读 2012-05-01 18:24:42
    简单说来,值传递传递的时候拷贝,就算传递的是引用类型,依然是地址的拷贝,所以之前的地址不变,交换之类的不会成功,但若改变变量的,则那个地址存的东西改变了,是会改变成功的。 --------------------------...
  • 1、在form1中要打开form2时(form1与form2均为类)  new form2 = New Form2();...注: ShowDialog()显示模式窗体 Show()显示非模式窗体 根据具体情况使用2、form之间传递参数例如: 在From2中有个属性 pr

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,747
精华内容 13,098
关键字:

vb按值传递和按地址传递