按值传递和按引用传递之间的区别
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]
的 y
和 i
的 z
的内存地址。对x y z
的操作实际上是对i
和a[1]
的操作。
我不知道你说的 "passed by value result" 是什么意思。我在其他地方从未见过这样的术语。
另外我想说的是,"reference"在编程世界中有两种截然不同的含义。我没有时间做很长的解释。您可以搜索 "reference type in Java" 和 "reference variables in C++" 以查看差异。
我有关于传递方法的问题,我想确保我理解正确
如果传入参数,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]
的 y
和 i
的 z
的内存地址。对x y z
的操作实际上是对i
和a[1]
的操作。
我不知道你说的 "passed by value result" 是什么意思。我在其他地方从未见过这样的术语。
另外我想说的是,"reference"在编程世界中有两种截然不同的含义。我没有时间做很长的解释。您可以搜索 "reference type in Java" 和 "reference variables in C++" 以查看差异。