按值传递传递参考和传递 - 之间的差异

时间:2016-05-10 00:37:22

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

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

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

left shift

这是我的回答

 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

这是对的吗?感谢

1 个答案:

答案 0 :(得分:1)

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

如果它们通过值传递,则形式参数将分配给参数的值。这意味着,实际参数的值被复制到形式参数。对形式参数的任何进一步操作都不会影响参数。在您的示例中,y被指定为a[1]的值,即10。在函数体中,y被重新分配,但a[1]不再发生任何事情。

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

我不知道你的意思是“通过价值结果”。我其他地方从未见过这样的条款。

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