用不同语言传递参数

时间:2011-01-13 08:56:36

标签: programming-languages parameters arguments return-value

有人可以解释下列传递参数的机制之间有什么区别:按值,按结果,按结果值,如果可能,请提供示例,提前谢谢

2 个答案:

答案 0 :(得分:1)

有关常规信息,请参阅Evaluation strategy

例如,您可以检查代码HERE

C#语言规范也很有用:

  

5.1.4值参数

     

没有引用或声明的参数   out修饰符是一个值参数。一个   值参数出现   在调用函数成员时   (方法,实例构造函数,   访问者或操作员)或匿名的   函数给哪个参数   属于,并用。初始化   在论文中给出的论证的价值   调用。通常是一个值参数   在返回时不再存在   函数成员或匿名函数。   但是,如果值参数是   由匿名函数捕获   (§7.15),其续航时间延长至   至少到代表或表达   从匿名创建的树   功能符合垃圾资格   采集。为了...的目的   明确的分配检查,一个值   最初考虑参数   分配

     

5.1.5参考参数

     

用ref声明的参数   修饰符是参考参数。一个   引用参数不会创建   新的存储位置。相反,一个   引用参数代表   与变量相同的存储位置   作为函数中的参数给出   成员或匿名函数   调用。因此,a的价值   参考参数始终相同   作为基础变量。该   遵循明确的分配规则   适用于参考参数。注意   不同的输出规则   参数§5.1.6。

中描述的参数      
      
  • 必须明确赋值变量   (§5.3)之前它可以作为一个传递   函数中的引用参数   成员或代理人调用。

  •   
  • 在函数成员或匿名函数中,引用   最初考虑参数   分配

  •   
     

在实例方法或实例中   结构类型的访问器,这个   关键字的行为与引用完全相同   结构类型的参数(第7.6.7节)。

     

5.1.6输出参数

     

用out声明的参数   修饰语是一个   输出参数。输出参数   不会创建新存储   地点。相反,输出参数   表示相同的存储位置   作为参数给出的变量   在函数成员或委托中   调用。因此,一个的价值   输出参数始终相同   基础变量。以下确定   分配规则适用于输出   参数。请注意不同的规则   用于参考参数   §5.1.5。

     
      
  • 在将变量作为
    传递之前,无需明确赋值   函数中的输出参数
      成员或代理人调用。
  •   
  • 正常完成功能成员或代表后   调用,每个变量是
      作为输出参数传递的是   被认为是在该执行中被分配   路径。
  •   
  • 在函数成员或匿名函数中,输出   最初考虑参数   未分配的。
  •   
  • 函数成员的每个输出参数或匿名   功能必须绝对   在函数之前分配(第5.3节)   会员或匿名职能
      通常会回来。
  •   
     

在一个实例构造函数中   结构类型,this关键字的行为   完全作为输出参数   结构类型(第7.6.7节)。

答案 1 :(得分:0)

参见C ++。完整参考指南。赫伯特希尔特。第三版。 139页。

“按值调用。此方法将参数的值复制到子例程的形式参数中。在这种情况下,对参数所做的更改不会对参数产生影响。”

“通过引用调用是将参数传递给子例程的第二种方法。在此 方法,将参数的地址复制到参数中。在子程序里面, 该地址用于访问调用中使用的实际参数。这意味着 对参数所做的更改会影响参数。“

...