静态和动态范围

时间:2010-06-22 12:33:20

标签: language-agnostic scope

我总是在静态和动态范围之间感到困惑,因此需要有人来检查我的评估。以下是示例代码:

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>过程PQ在main之内,因此如果未在其本地范围中定义,它们应始终引用main函数中的变量。这与程序调用的方式无关 3>在示例中,过程P定义了变量x。因此它会遮蔽main's x 4>程序Q未定义变量x,因此应引用main's x

输出为
1>对于静态范围和传递值=> 1
2>对于动态范围和传递值=> 2

3>对于静态作用域并通过引用传递=> 4
4>对于动态范围并通过引用传递=> 3

如果我在某个地方出错了,请告诉我。此外,如果有人能够为我提供有关如上所述的静态和动态范围示例的有用链接,那将是很棒的。

谢谢,
darkie

1 个答案:

答案 0 :(得分:1)

a number of articles out there。谷歌是你的朋友: - )

[编辑] 在阅读其中一些链接后,我认为以下情况属实:

  1. 对于静态范围和传递值=> 1
  2. 对于动态范围和传递值=>的 1
  3. 对于静态作用域并通过引用传递=> 4
  4. 用于动态范围并通过引用传递=> 3
  5. 第2点应返回1,因为您传递了值,因此您传入的x永远不会被修改。

    Tim Hoolihan an example which is easier to follow