参数的传递


一、概念的理解

1、参数传递:在使用函数时,要填入与函数形式参数个数相同的实际参数(有默认参数的除外),在程序运行过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据的处理和返回。

2、 形式参数:定义函数时函数名后面括号中的变量名;实际参数:调用函数时函数名后面括号中的表达式。通常情况下,我们将Sub或Function过程中定义的参数称为形式参数;而调用Sub或Function时的参数称为实际参数,简称实参。

说明 1. 形参只能是变量,实参可以是常量、变量或表达式。在被定义的函数中,必须指定形参的类型。

2. 实参与形参的个数应一样,类型应一致。字符型和整型可以互相通用。

3. 在调用函数时,如果实参是数组名,则传递给形参的是数组的首地址

4.实参传递给形参是单向传递,形参变量在未出现函数调用时,并不占用内存,只在调用时才占用。调用结束后,将释放内存。执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中的实参的值。

二、通过两个实例来说明一下按值传递与按地址传递的不同



1、通常,过程定义时,若形参名前面设置有关键字“Byval”,则指定它所对应的实参是按值传递的。在实参调用过程时,VB给形参分配一个临时存储单元,将实参变量的值复制到这个临时单元中。也就是说,按值传递参数时,传递的只是实参变量的副本,过程对形参的任何改变只在过程内部有效,不会影响实参变量本身。换句话说,一旦过程运行结束,对应的实参变量保持调用前的值不变。

2、过程定义时,若形参名前面没有关键字“Byval”,即缺省修饰词,或有Byref关键字时,则指定它是一个按地址传递的参数。按地址传递参数时,形参和实参公用内存的同一“地址”。因此,被调用过程中对形参的任何操作都变成对相应实参的操作,实参的值就会随过程体内对形参的改变而实时改变。

3、 通常实参是变量形式,则参数的传递方式完全由前面形参的前缀Byval,Byref决定,但当实参是常量、表达式形式,系统是强制按值方式传递参数;实参是数组、对象形式,系统是强制按地址方式传递参数,与其对应形参前缀设置无关。

三、选用参数传递的原则

一般来说,按地址传递要比按值传递参数更节省内存,效率更高,因为系统不必再为形参分配内存、再把实参的值拷贝给它。对于字符串型和数组参数,这种效率尤其显著。

选用参数传递方式的原则如下:

(1)如果要将过程中的结果通过形参返回给主调程序,则形参必须是按地址传递。这时实参必须是同类型的变量名,不能为常量或表达式。

(2)如果实参的作用仅仅是将其值单向传给形参,但并不想让过程体内对形参的改变来影响实参,这时形参一般应选用传值方式。这样可增加程序的可靠性,便于调试,减少各过程间的关联。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中,参数传递可以通过值传递引用传递两种方式进行。 1. 值传递:当使用值传递时,函数接收到的是实际参数的副本,对副本的修改不会影响到原始参数的值。这种方式适用于传递简单的数据类型,如数字、字符或逻辑值。在函数内部修改参数的值不会影响到函数外部。 2. 引用传递:当使用引用传递时,函数接收到的是实际参数的引用,对引用的修改会直接影响到原始参数的值。这种方式适用于传递复杂的数据类型,如数组、结构体或对象。在函数内部修改参数的值会影响到函数外部。 下面是一些MATLAB参数传递的示例: 1. 值传递示例: ```matlab function result = square(x) result = x^2; end a = 5; b = square(a); disp(b); % 输出 25 disp(a); % 输出 5 ``` 在上面的示例中,函数`square`接收一个参数`x`,并返回其平方。当调用`square(a)`时,实际参数`a`的值被复制到形式参数`x`,在函数内部对`x`的修改不会影响到`a`的值。 2. 引用传递示例: ```matlab function modifyArray(arr) arr(1) = 100; end myArray = [1, 2, 3]; modifyArray(myArray); disp(myArray); % 输出 100 2 3 ``` 在上面的示例中,函数`modifyArray`接收一个参数`arr`,并将数组的第一个元素修改为100。当调用`modifyArray(myArray)`时,实际参数`myArray`的引用被传递给形式参数`arr`,在函数内部对`arr`的修改会直接影响到`myArray`的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值