我有这个问题:
该计划非常简单:
sub(b, a)
<=>
sub(x, y)
x = x + y = 3 + 2 = 5
y = x + y = 5 + 2 = 7
<=>
b = 5
a = 7
因此 d 是正确答案
但给出的答案是 c (a = 7,b = 3)
为什么呢?我在这里失踪了什么?
非常感谢任何帮助!
答案 0 :(得分:1)
请注意,“参数x
按值调用,参数y
通过引用调用”。
因此,{em>值传递b
,这意味着x
内的sub
只是一个局部变量 - 它不指向同一位置b
。
因此,对x
内的sub
所做的更改不会影响传入的变量b
。
与引用传递的y
对比,这意味着y
和a
实际上是同一个变量,因此更改为{{1} } y
内部sub
反映在其中。
答案 1 :(得分:1)
这里的技巧是传值和传递参考之间的区别。因为提示注释x
按值传递(或“调用”)。这意味着当您将b
传递给sub
作为x
时,x
仅包含b
的文字值。从实际角度来看,这意味着对x
中的sub
所做的任何更改不会影响主程序中的b
。
另一方面,由于y
是通过引用传递的,当您将a
传递给sub
y
时,y
实际上是引用到变量a
(y
“指向”a
)。这意味着,如果您对y
中的sub
进行了更改,则这些更改会影响主程序中的 a
。
如果以上内容让您感到困惑,请以这种方式考虑:如果变量通过值传递给函数,则可以将参数名称(x
)替换为值3)。如果通过引用函数传递变量,则可以将其视为将参数名称(y
)替换为参数(a
)的变量名称。
考虑到这一点,让我们重温一下这个问题:
a = 2;
b = 3;
sub(b, a);
----------
x = x + y
(在此行中x
代表b
的值,即3
,因此值x
(但不是b
{1}})现在是5
)
y = x + y
(在此行y
代表实际变量 a
,其值为3.当我们将x
添加到y
时, ,实际更改 a
。因此,此行后y
和a
的值均为7)
返回;
正如您所看到的,b
无法在原始函数中更改,因此其最终值只能是3
。但是a
可以更改,并且由于sub
中的操作现在具有7
的值。
我希望这能解决你在解决这个问题时遇到的任何困惑。