精华内容
下载资源
问答
  • VB过程中使用的参数分为实参和形参,简单的讲,在过程定义中给定的参数是形参,而在过程调用语句中给定的参数是实参。...对参数传递方式的正确判别是过程学习中的一个难点,也是等级考试中的一个考点
  • Tips:欢迎公众号设置为星标,VB技术干货文章可以第一时间看到。如您在学习VB过程中有独特的见解或者想法...函数和过程的参数传递方式在调用过程时,过程中使用的是实际参数,它要与定义过程时的形式参数一一对应,...

    Tips:欢迎公众号设置为星标,VB技术干货文章可以第一时间看到。如您在学习VB过程中有独特的见解或者想法,欢迎投稿,可在公众号文章下直接留言.

    1. VB编程语言基础知识点总结

    2. VB编程基本数据类型完整剖析

    3. VB编程设计--文件同步程序的开发

    4. VB与数据库开发三步走攻略!

    函数和过程的参数传递方式

    在调用过程时,过程中使用的是实际参数,它要与定义过程时的形式参数一一对应,并以适当的形式将实参传给形参,这便是参数传递,也是虚(形参)实(实参)结合。

    VB编程中参数传递方式有两种:传值和传址。


     传值


    传值:将实参的值传给形参后,实参与形参间便无任何联系,即形参的变化不会对实参产生任何影响。传值时,在形参前用 ByVal来界定。

    例: 传值调用。

    Private Sub Command1_Click()

        Dim x as Integer,y as Integer

        x=10

        y=20

        Print ″x=″;x,″y=″;y; 

        Call temp(x,y)

        Print ″x=″;x,″y=″;y;

    End Sub

    Sub temp (ByVal x As Integer,ByVal y As Integer)

        x=x+100

        y=x*60

        Print ″x=″;x,″y=″;y;

    End Sub

    09f4d391dec1c413d013528040a60173.png


     传址


    传址(默认方式,也叫引用):形参与对应实参用相同的内存地址,形参的改变将影响实参,形参实际上是实参的别名。

    例 : 按址传递

    Private Sub Command1_Click() ‘按址传递

        x = 10

        y = 20

        Cls

        Print "x="; x, "y="; y, "调用前实参"

        Call temp1(x, y)

        Print "x="; x, "y="; y, "调用后实参"

    End Sub

    Sub temp1(x,  y) ‘按址传递

        x = x + 100

        y = x * 60

        Print "x="; x, "y="; y, "调用过程中的参数"

    End Sub

    4bda2b12c3a40e3d6cca6ff328022fb1.png

    综上,我们可以发现,同样的代码,使用不同的参数传递方式,其运行结果也不相同,大家在学习的过程中一定要深刻理解。

    51f79237fd93799aa30b7c2caf436534.png

    大家在VB学习中有任何问题

    可以添加下图老师微信号

    e2138166820e6803c1ed94bc9a967016.png

    展开全文
  • 在各种语言中,输入参数传递方法(地址传递、值传递)各有不同。如: VB :默认为地址传递,可以指定用值传递 C: 普通方式实现值传递,指针方式实现地址传递 C++:比 C 多了引用传...

          转载:http://kecheng0927.blog.163.com/blog/static/116414616201109103916943/

     

    在各种语言中,输入参数传递方法(地址传递、值传递)各有不同。如:

          VB :默认为地址传递,可以指定用值传递

          C: 普通方式实现值传递,指针方式实现地址传递

          C++:比 C 多了引用传递,本质上是地址传递

          Fortran: 默认为地址传递,可以指定使用值传递

     

          两种传递方式的区别:

          1. 用地址传递方式可以在函数内部修改传入的参数值,而值传递不可以。

          2. 值传递需要对输入的参数进行拷贝,复杂的数据结构值传递时会降低程序执行的效率。

     

          那么MATLAB的函数参数究竟用哪一种方式呢?

          查看帮助文档得到结果:如果函数内部试图修改输入参数的值则为值传递,如果没有修改则为地址传递。

     

          采用这一处理方式的目的是:

          1. 不允许函数内部修改输入参数的值

          2. 兼顾执行效率(地址传递不需要将输入参数拷贝一份)

     

          那么我们可不可以去验证一下呢?

          首先我们需要借助一个mex函数,该函数的功能就是改变输入参数的数值,由于该函数是借助mex方式实现的,所以MATLAB无法检测到我们修改了输入参数的值。

          以下是该mex函数的代码:mexChangeValue.cpp 

     

    1. #include "mex.h"  
    2.   
    3. void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])  
    4. {  
    5.     if(nrhs != 1)  
    6.     {  
    7.       mexErrMsgTxt("需要一个输入参数!");  
    8.     }  
    9.   
    10.     if(mxIsEmpty(prhs[0]) || !mxIsDouble(prhs[0]))  
    11.     {  
    12.       mexErrMsgTxt("输入参数必须为非空 Double 类型!");  
    13.     }  
    14.   
    15.     double *pValue = mxGetPr(prhs[0]);  
    16.     pValue[0] = 1.2;  
    17. }  

     

          然后开始做实验:

     

     

    1. function ArgTest  
    2. clc  
    3. a = 0;  
    4. fun1(a);  
    5. disp(a);  
    6.   
    7. b = 0;  
    8. fun2(b);  
    9. disp(b);  
    10.   
    11. function fun1(a)  
    12. % 更改输入参数的值为 3,此时MATLAB做一份外部输入参数的拷贝  
    13. a = 3;  
    14. % 用mex方式将输入参数的值改为 1.2,因为做了一份拷贝,所以并没有更改外部参数的值  
    15. mexChangeValue(a);  
    16.   
    17. function fun2(b)  
    18. % 用mex方式将输入参数的值改为 1.2,还没有做拷贝,更改了外部参数的值  
    19. mexChangeValue(b);  
    20. % 此时做了外部参数的一份拷贝,但为时已晚,外部参数的值已经被更改了  
    21. b = 3;   

          我们可以看到输出结果为:

          0

          1.2000

          a 的值没有改变,而 b 的值被改变了,说明在 fun1 中 "a = 3;" 之后,对输入参数 a 做了一份拷贝,变为“值传递”,而在 fun2 中刚开始进入函数时是“地址传递”的。

          结论:

          1. 在改变输入参数的值之前是“地址传递”的,在改变输入参数的值之后变为“值传递”。

          2. 我们在编写函数时,尽量不要对输入参数重新赋值,尤其是对复杂的数据,这样会降低执行效率。

    转载于:https://www.cnblogs.com/pankejia/p/3420573.html

    展开全文
  • 简而言之,ByRef 和 ByVal 的区别在于参数源是否可以被函数修改,前者(默认方式)是可以被修改的,而后者是不能被修改的。例:Private Function Func(ByRef argv1 As String, ByVal argv2 As String) ...
    简而言之,ByRef 和 ByVal 的区别在于参数源是否可以被函数修改,前者(默认方式)是可以被修改的,而后者是不能被修改的。
    例:
    Private Function Func(ByRef argv1 As StringByVal argv2 As String)
        argv1 
    = "I love WYC!"
        argv2 
    = "I love WYC!"
    End Function
    调用:
    Sub Main()
        
    Dim a As String, b As String
        a 
    = "This is a!"
        b 
    = "This is b!"
        Func a, b
        
    MsgBox a & ";" & b
    End Sub
    程序执行后的结果为:I love WYC!;This is b!
    原因是:ByRef 类型的参数在函数过程中被重新赋值,所以函数调用结束后,a变量的值为新被赋予的“I love WYC!”,而作为 ByVal 类型的参数b,由于不能被程序修改,即使在函数过程中对该变量重新赋值,其值仍为函数调用前的“This is b!”。另外,声明 ByRef 类型的参数时,可以不声明为 ByRef <参数><类型>,而只用 <参数><类型> 即可, ByVal 则必须使用 ByVal <参数><类型>
    展开全文
  • 最近正在用C#编写一个管理程序,由于用到了MFC编写的一个控件,...其中涉及到几个函数,比较典型的一个在MFC中(标准C++中的引用表示方式)的函数表示如下:bool GetCurItem(int &startHour, int &startMin,int &endHo

          最近正在用C#编写一个管理程序,由于用到了MFC编写的一个控件,我必须通过C ++.NET封装了该类,将其写入一个UserControl,然后通过C#调用这个UserControl。其中涉及到几个函数,比较典型的一个在MFC中(标准C++中的引用表示方式)的函数表示如下:

    bool GetCurItem(int &startHour, int &startMin,int &endHour,int &nEndMin, CString &strText,   COLORREF &crBackground)

    作用是返回控件中当前项目(Item)的一些信息,在MFC中通过在函数声明中使用“&”限制参数表示引用,可以通过参数返回有关的值,通过C++.NET(CLR)封装必须是如下的方式:

    bool GetCurItem( int %nBegHour,int %nBegMin,int %nEndHour,int %nEndMin,  String  ^%strText, COLORREF %crBackground)
     C++在托管的代码中使用“%”表示按引用传递参数。当然,如果上面的这个函数中将除了strText参数之外的其他参数前的“%”符号修改为“&”编译也可以通过,但是C#却不能够正常调用了。

    在C#中对应的函数的表示方式是:

    bool GetCurItem( ref int nBegHour,ref int nBegMin,ref int nEndHour,ref int nEndMin,  ref String  strText, ref uint crBackground)

    在C#中,通过在函数参数之前(确切的说,应该是在数据类型之前)添加ref关键字表示一个引用。

    在VB.NET中,同样函数的表示如下

     Private Function GetCurItem(ByRef nBegHour As Integer, ByRef nBegMin As Integer, ByRef nEndHour As Integer, ByRef nEndMin As Integer, ByRef strText As String, ByRef crBackground As Long) As Boolean
    在VB.NET中,直接在函数参数的前面添加byref关键字,表示按引用传递。

    说明

            1)由于C ++可以同时支持本地代码和托管代码,因此,引用的表示方式也有两种,一种是本地代码的表示方式,一种是托管代码的表示方式,VB和C#各有一种。

            2)C++中托管和非托管混合编程时,特别注意不要将&和%混淆,这两个符号在编译时都没有问题,如果希望函数被其他托管代码调用,使用%,如果被C++非托管代码调用,则使用&。

            3)在具有按引用传递参数的函数中,函数的调用方式各种语言也不尽相同,例如,C++和VB中,都是将变量直接作为参数传递给GetCurItem函数即可,但是在C#中,每个参数的前面必须写上ref,例如C#调用GetCurItem函数的方式如下:

    GetCurItem(ref  nBegHour, ref nBegMin, ref nEndHour, ref nEndMin, ref sText, ref nColor);

     

    展开全文
  • 对于C/C++接口中的自定义类型,要给出对齐方式。如果调用者是C/C++,那么应当指定成相同的对齐方式;非C/C++且无自定义的能力,那么只能用byte数组自己组装和拆卸。 因为某个项目中曾经试图用Java来调用设备的控制...
  • 按值传递(Byval)和按地址传递(ByRef)---参数传递

    千次阅读 热门讨论 2012-08-08 11:25:21
    在接触了这么多的编程语言后,似乎每个语言都要涉及到参数的传递,而参数传递过程中的两种传递方式: ①按值传递  ②按地址传递 学到现在了,仔细想想还是很模糊,从开始接触C++中的参数传递,只知道有...
  • VB中如何传递指针给DLL

    千次阅读 2007-02-23 19:22:00
    VB默认的传递方式就是传指针(ByRef,也就是把变量的地址传递给所调用的函数)。如果要传值(也就是把变量的值传递给所调用的函数)反要在参数声明前加ByVal。所以如果你传递的参数是普通的数据类型,在参数前什么都不要...
  • C#中调用非托管的DLL及参数传递

    千次阅读 2011-03-25 16:47:00
    ?????? 微软的.NET框架的优点之一是...这也就是说,你的参数必须被marshal(注:不知道中文名称该叫什么,英文中指的是为了某个目的而组织人或事物,参见这里,此处指的是为了调用非托管函数而进行的参数转换)。<br /
  • 你可以在VB、C++、C#等语言中编写一些类,而在其它语言中使用(源于.NET中使用了CLS),你甚至可以从另一种语言编写的类中继承。但是你要是想调用以前的非托管DLL,那又会怎么样呢?你必须以某种方式将.NET对象转换...
  • 方法一:VB默认的传递方式就是传指针(ByRef,也就是把变量的地址传递给所调用的函数)。如果要传值(也就是把变量的值传递给所调用的函数)反要在参数声明前加ByVal。所以如果你传递的参数是普通的数据类型,在参数前...
  • 成生P1.exe,第二次运行时,会向第一次运行的窗口传递参数。 多进程构想: 用两个程序的方式设计这个程序,可以让两个程序间传递参数。 若以子程序运行,即可简单实现多进程。
  • 用户自定义类型(User-defined Type)参数传递 用户自定义类型在VB中是一种重要的数据类型,它为编程者提供了很大的灵活性,使开发人员可以根据需要构造自己的数据结构。它相当于C/C++中的结构类型(structure)。...
  • VB的发送接收需要通过传递指针实现(换言之是字符串的内存地址),下面总结VB方式、C#方式各自如何实现消息的发送与接收;各自是可以互换的,譬如C#发送的消息,VB窗口可以收到;相反亦可以。当然同种语言之间更加没...
  • About VB

    2015-03-18 13:47:00
    1.VB函数(过程)调用,参数的默认传递方式为引用(ByRef),值传递为ByVal 转载于:https://www.cnblogs.com/aoun/p/4346984.html
  • vb6.0第五课

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

    2019-09-22 08:53:15
    函数调用的参数传递有“值传递”和“引用传递”两种传递方式。如果采用“值传递”,在函数内部改变了参数的值,主调程序的对应变量的值不会改变;如果采用“引用传递”,在函数内部改变了参数的值,主调函数对应变量...
  • 在函数后面的括号里是跟的参数表,包括参数名,参数类型以及参数传递方式,如果没有参数则可以保持为空。前面的private表示此函数是私有的,sub代表这个函数兼有子过程的特性。整个的意思就是:当你用鼠标点击名为...
  • VB 学习汇总

    2010-04-09 17:02:00
    2010.04.09.22.45 Albert: VB5 SP3 win95 我在... 回答: VB默认的传递方式就是传指针(ByRef,也就是把变量的地址传递给所调用的函数)。如果要传值(也就是把变量的值传递给所调用的函数)反要在参数声明前加ByVal。所以如
  • ByVal 与 ByRef(默认值)这两个是子过程的参数传递时,指定参数按什么传递的ByVal(按值传递)ByRef(按地址传递)具体这样来理解:过程中的参数列表,我们称形参调用过程时的参数列表,我们称实参在调用时,我们要将实参的值...
  • 主要内容是,自定义函数过程和子过程声明与调用的语法格式、参数含义及功能特性;三种参数传递方式(值传递、地址传递、数组传递)的应用;嵌套调用和递归调用的执行流程以及递归过程的特点
  • VB中Byval和byref的区别

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

    2018-09-13 23:50:23
    active exe 方式的多线程 区别在于只使用了一个工程不需要做多个exe 内部变量参数传递使用的是事件的方式 而且可以再ide下调试运行 (调试状态使用的是单线程) 使用msgbox 也不会报错 代码也简单. 应该是比较完美的...
  • vb 函数 及其解释

    2020-03-31 18:25:32
    1、trim(去掉空格) Trim 函数 将两头空格全部去除。 eg: MyString = " <-Trim-> " ’ 设置字符串初值。...2、ByVal | ByRef(值的传递方式) ByVal 可选的。表示该参数按值传递。 ByRef 可选...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 132
精华内容 52
关键字:

vb参数传递方式