静态动态范围的不同输出

时间:2018-01-09 14:20:04

标签: scope dynamic-programming pass-by-reference pass-by-value

我正在学习静态范围和动态范围语言之间的区别。 这是一段代码段伪代码。 write(x)将打印出x的值。

{
    int x = 2;
    void fie(reference int y) {
        y = x + y;
        x = x + 1;
    }
    {
        x = 3;
        {
           int y = 5;
           int x =6;
           fie(x);
           write(x);
        }
    }
    write(x);
}

静态/按引用传递,动态/按引用传递,静态/按值传递,动态/按值传递的输出是什么?

以下是我的意见:

  1. 对于静态/传递引用,答案是9和4。 对于第一个输出:fie(x)与6一起传递。 在fie函数中,第一行y = x + y,这里,x是3(因为它是静态的,它从全局范围读取x值,即3),现在y变为y = 3 + 6,y变为9.当它通过引用传递时,y的值被改变,x也被改变,所以第一次写(x)输出9。

    • 对于第二个输出:x从全局范围读取。 x首先分配3并在fie函数中加1,因此输出为4。
  2. 对于动态/传递参考,我的答案是13,3。我不确定它。 对于第一个输出:fie(x)与6一起传递。在fie函数中,第一行:y = x + y。 y是6.从调用范围读取x,因此x的值为6.现在y = 6 + 6.y变为12.因为它是通过引用传递的,x也变为12,x = x + 1,x变为13.这就是为什么我认为的第一个是13。

    • 对于第二个输出:x从全局范围读取,因此输出为3.
  3. 对于静态/按值传递,我的答案是6,4

  4. 对于动态/按值传递,我的答案是7,3

0 个答案:

没有答案