我正在学习静态范围和动态范围语言之间的区别。 这是一段代码段伪代码。 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也被改变,所以第一次写(x)输出9。
对于动态/传递参考,我的答案是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。
对于静态/按值传递,我的答案是6,4