Я всегда путаюсь между статической и динамической областью видимости и, следовательно, мне нужен кто-то, чтобы проверить мою оценку. Ниже приведен пример кода:
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 и, следовательно, они всегда должны ссылаться на переменные в главной функции, если они не определены в ее локальной области видимости. Это независимо от способа вызова процедуры
3> В этом примере для процедуры P
определена переменная x
. Следовательно, это должно затмить main's x
.
4> Процедура Q
не имеет определенной переменной x
и, следовательно, должна ссылаться на main's x
Выход
1> Для статического обзора и передачи по значению => 1
2> Для динамического определения объема и передачи по значению => 2
3> Для статического обзора и передачи по ссылке => 4
4> Для динамического определения объема и передачи по ссылке => 3
Пожалуйста, дайте мне знать, если я где-то ошибся. Кроме того, было бы здорово, если бы кто-нибудь мог предоставить мне полезную ссылку на примеры статической и динамической области видимости, такие как выше.
Спасибо
Негр