按值传递和按引用传递之间的区别

difference between Pass-by-value pass-by-reference and pass-by-

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

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

这是我的回答

 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

这是正确的吗?谢谢

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

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

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

我不知道你说的 "passed by value result" 是什么意思。我在其他地方从未见过这样的术语。

另外我想说的是,"reference"在编程世界中有两种截然不同的含义。我没有时间做很长的解释。您可以搜索 "reference type in Java" 和 "reference variables in C++" 以查看差异。