【问题标题】:difference between Pass-by-value pass-by-reference and pass-by-Pass-by-value-pass-by-reference和pass-by-之间的区别
【发布时间】:2016-09-04 18:46:25
【问题描述】:

我有一个关于传递方法的问题,我想确保我理解正确

如果参数被传递,i 和数组 a 的值是多少 一个值 b 参考 c 值/结果 假设我们有以下伪代码

这是我的答案

 By value 
 i = 1
 a[1]=10
 a[2]=11

  by reference
 i = 3
 a[1] = 2
 a[2] = 11

 by value result
i = 2
a[1] = 10
a[2] = 1

这是正确的吗?谢谢

【问题讨论】:

  • 所以 a[2] 永远不会在这里改变?它总是 a[2] = 11 ?

标签: pass-by-reference pass-by-value


【解决方案1】:

首先,当您调用一个函数(或过程,无论您如何命名)时,都会创建一个新的调用堆栈。在该调用堆栈上,参数被分配给值(参数是函数签名的一部分。通常我们称它们为“形式参数”,如上述过程f 中的x y z)。它们的分配是根据调用函数的实际参数。

如果它们是按值传递的,则将形式参数分配给参数的值。这意味着,实际参数的值被复制到形式参数。对形式参数的任何进一步操作根本不会影响参数。在您的示例中,y 被分配给a[1] 的值,即10。在函数体中,y 被重新分配,但 a[1] 没有任何变化。

另一方面,如果它们是通过引用传递的,则形式参数被分配给实际参数的内存地址,并且在函数体中,形式参数被隐式地取消引用到该内存地址的值。在您的示例中,x 将保存i 的内存地址,y 用于a[1]z 也用于i。对x y z 的操作实际上是对ia[1] 的操作。

我不知道您所说的“通过值结果”是什么意思。我在其他地方从未见过这样的术语。

我要提到的另一件事是,在编程世界中,“引用”有两种不同的含义。我将没有时间进行长篇解释。您可以搜索“Java 中的引用类型”和“C++ 中的引用变量”来查看差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2022-02-24
    • 2012-03-04
    • 2015-04-08
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多