2011-01-13 110 views
1

可有人请解释什么是传递参数如下机制之间的区别:按值,通过结果,结果值,结合实例如果可能的话,在此先感谢传递参数

+0

你见过这篇文章吗?:http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/ Chapter_11/CH11-2.html – davogotland 2011-01-13 09:29:46

回答

1

有关一般信息,请参阅Evaluation strategy

例如,您可以检查HERE的代码。

另外C#语言规范可以是有用的:无ref或 出改性剂是值参数声明

5.1.4值参数

的参数。甲 值参数开始存在 在所述功能部件 (方法,实例构造, 存取,或操作者)或匿名 功能到的参数 所属的调用,并与在给定的 值参数的初始化 调用。通常 的值参数在返回 函数成员或匿名函数时不再存在。 然而,如果值参数是 通过匿名函数 (第7.15节)捕获,其寿命时间在 延伸至少直到委托或表达来自匿名 函数创建 树是符合垃圾 集合。对于 明确分配检查的目的,值 参数被认为最初分配为 。

5.1.5参考参数

与REF 修饰符声明的参数是一个参考的参数。 A 参考参数不会创建 新的存储位置。相反, 参考参数表示与 成员函数或匿名函数 调用中的参数给出的变量 相同的存储位置。因此, 参考参数的值始终与底层变量 相同。以下明确的分配规则 适用于参考参数。注意 §5.1.6中描述的输出 参数的不同规则。

  • 一个变量必须被明确赋值 (第5.3节),才可以作为 参考参数的函数 构件或委托调用被传递。

  • 在函数成员或匿名函数中,参考 参数被认为最初分配为 。

在结构类型的实例方法或实例 存取时,此 关键字的行为与结构类型(§7.6.7)的参考 参数。

5.1.6输出参数

用out 修饰符声明的参数是 输出参数。输出参数 不会创建新的存储位置 位置。相反,输出参数 表示与函数成员或委托人 调用中作为参数 给出的变量相同的存储位置 。因此,输出参数 的值始终与底层变量 相同。以下确定的 分配规则适用于输出 参数。请注意0​​§5.1.5中描述的参考参数的不同规则 。

  • 变量不需要被明确赋值,才可以作为
    输出参数在函数
    构件被传递或委托调用。
  • 继功能部件的正常完成或委托
    调用,每个是
    作为输出参数传递是
    认为是分配在执行 路径变量。
  • 在函数成员或匿名函数中,输出 参数被认为最初是未分配的 。
  • 函数成员或匿名 功能的每一个输出参数必须是绝对 分配(第5.3节)的函数 构件或匿名函数
    正常返回之前。

在一个 结构类型的实例构造中,这个关键字的行为 完全一样 结构类型(§7.6.7)的输出参数。

0

见C++。完整的参考指南。赫伯特Shildt。第三版。 139页。 “

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

“呼叫参考是将参数传递到子程序的第二方式,在这个 方法中,参数的地址被复制到参数。子程序内部, 地址用于访问所用的实际参数这意味着 对参数所做的更改会影响参数。“

...

+1

很好的解释了传递值和通过参考。没有回答关于通过结果和结果值的问题,虽然 – davogotland 2011-01-13 09:11:02