提问人:Davidw 提问时间:1/9/2018 最后编辑:PM 77-1Davidw 更新时间:1/9/2018 访问量:57
静态动态示波器的不同输出
different output of static dynamic scope
问:
我正在学习静态范围和动态范围语言之间的区别。 这是一个片段伪代码。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);
}
静态/按引用传递、动态/按引用传递、静态/按值传递、动态/按值传递的输出是什么?
以下是我的想法:
对于静态/通过引用,答案是 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。
对于动态/传递引用,我的答案是 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。
对于静态/按值传递,我的答案是 6、4
- 对于动态/按值传递,我的答案是 7、3
答: 暂无答案
评论