【问题标题】:Confusing about a very simple program对一个非常简单的程序感到困惑
【发布时间】:2014-10-08 21:06:15
【问题描述】:

我有这个问题:

程序很简单:

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 )

为什么?我在这里错过了什么?

非常感谢任何帮助!

【问题讨论】:

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


    【解决方案1】:

    注意“参数x被值调用,参数y被引用调用”。

    所以b 是通过 传递的,这意味着sub 中的x 只是一个局部变量——它没有指向与b 相同的位置。

    因此,对sub 内部的x 所做的更改不会影响传入的变量b

    对比y通过reference传递,这意味着ya实际上是同一个变量,所以y里面y的变化体现在a 在它之外。

    【讨论】:

    • 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!从来没有学会仔细阅读问题!谢谢大佬,我会把它标记为答案
    • 没问题,这是一个偷偷摸摸的!
    【解决方案2】:

    这里的技巧是按值传递和按引用传递之间的区别。正如提示所指出的,x 按值传递(或“调用”)。这意味着当您将b 传递给sub 作为x 时,x 只包含b 的文字值。从实际的角度来看,这意味着对 sub 中的 x 所做的任何更改都将不会影响主程序中的 b

    另一方面,由于y 是通过引用传递的,所以当您将a 作为y 传递给sub 时,y 实际上是对变量@ 的引用 987654335@(y“指向”a)。这意味着如果您在sub 中对y 进行更改这些更改会影响 a 回到主程序中。

    如果上面的内容让你感到困惑,可以这样想:如果一个变量是按值传递给函数的,你可以将参数名(x)替换为论点(3)。如果变量通过引用传递给函数,您可以将其视为将参数名称 (y) 替换为参数 (a) 的变量名称

    考虑到这一点,让我们重新审视这个问题:

    a = 2;
    b = 3;
    
    sub(b, a);
    
    ----------
    
    x = x + y
    

    (在这一行中x代表b,即3,所以x(但不是b)的值现在是5 )

    y = x + y
    

    (在这一行中y代表实际变量a,其值为3。但是,当我们将x添加到y时,它实际上发生了变化 a. 所以这行后面ya的值都是7) 返回;

    所以如你所见,b在原函数中是不能改变的,所以它的最终值只能是3。但是a 可以更改,并且由于sub 中的操作现在具有7 的值。

    我希望这可以消除您在遇到此问题时遇到的任何困惑。

    【讨论】:

    • 非常感谢亚历克斯,我知道参数传递的东西,我没有看到问题的鬼鬼祟祟的线,不知道为什么,我这么粗心,无论如何谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    相关资源
    最近更新 更多