【发布时间】:2011-03-06 19:20:03
【问题描述】:
我总是对静态和动态范围感到困惑,因此需要有人检查我的评估。以下是示例代码:
int x = 1;
procedure P(i) {
int x = 1;
i++;
Q(i);
}
procedure Q(j) {
j = j + x;
}
P(x)
print x
在静态作用域中,我们总是查看函数/过程的位置以了解其作用域。因此,
1 main 是程序的最外层范围
2 > 过程P 和Q 在main 中,因此如果未在其本地范围内定义,它们应始终引用main 函数中的变量。这与过程调用的方式无关
3 > 在示例中,过程P 定义了变量x。因此它会影响main's x。
4 > 过程Q 没有定义变量x,因此应引用main's x
输出是
1 > 对于静态范围和值传递=> 1
2 > 动态作用域和值传递=> 2
3 > 用于静态范围和通过引用传递=> 4
4 > 对于动态范围和通过引用传递=> 3
如果我在某个地方出错了,请告诉我。此外,如果有人可以为我提供有关上述静态和动态范围示例的有用链接,那就太好了。
谢谢,
小黑子
【问题讨论】:
-
这是一种特定的语言还是与语言无关?请适当标记。