我有关于传递方法的问题,我想确保我理解正确
传递参数的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
这是对的吗?感谢
答案 0 :(得分:1)
首先,当你调用一个函数(或过程,无论你命名它)时,都会创建一个新的调用堆栈。在该调用堆栈上,参数被赋值给值(参数是函数签名的一部分。通常我们将它们称为'形式参数',如上述过程x y z
中的f
) 。它们的分配是根据调用函数的实际参数。
如果它们通过值传递,则形式参数将分配给参数的值。这意味着,实际参数的值被复制到形式参数。对形式参数的任何进一步操作都不会影响参数。在您的示例中,y
被指定为a[1]
的值,即10
。在函数体中,y
被重新分配,但a[1]
不再发生任何事情。
如果它们通过引用传递,另一方面,形式参数被分配给实际参数的存储器地址,并且在函数体中,形式参数被隐式地取消引用到该存储器地址的值。在您的示例中,x
将保留i
的内存地址,y
的{{1}}和a[1]
的{{1}}。 z
上的操作实际上是i
和x y z
上的操作。
我不知道你的意思是“通过价值结果”。我其他地方从未见过这样的条款。
我想提到的另一件事是,编程世界中有两个不同的“参考”含义。我没有时间做出长篇解释。您可以搜索“Java中的引用类型”和“C ++中的引用变量”来查看差异。