静态动态示波器的不同输出

different output of static dynamic scope

提问人:Davidw 提问时间:1/9/2018 最后编辑:PM 77-1Davidw 更新时间:1/9/2018 访问量:57

问:

我正在学习静态范围和动态范围语言之间的区别。 这是一个片段伪代码。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 也会改变,所以第一个 write(x) 输出 9。

    • 对于第二个输出:x 是从全局范围读取的。在 fie 函数中,x 首先被赋值为 3,然后由 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
示波器 动态规划 按引用传递 值传递

评论

1赞 DBS 1/9/2018
静态(词法)范围与动态范围(伪代码)的可能重复
0赞 PM 77-1 1/9/2018
虽然这是一个问答网站,但你不应该只是在这里重新发布你的作业并期望它已经完成了。如果您有具体问题,请描述它,我们将尽力提供帮助。告诉我们你自己走了多远,你到底被困在哪里。
0赞 Davidw 1/9/2018
@PM77-1 这不是家庭作业。我只是遇到了这个问题。我的解决方案如下:对于静态和按引用传递 9,动态和按引用传递的 4 是 13,静态和按值传递的 3 是 6,4 对于静态和按值传递的 7,3
0赞 PM 77-1 1/9/2018
请在您的问题中添加您自己的答案及其背后的推理(使用编辑)。
0赞 Davidw 1/9/2018
@PM77-1 请参阅我的评论,我不确定我的分析是否正确。

答: 暂无答案