Статический и динамический обзор - PullRequest
0 голосов
/ 22 июня 2010

Я всегда путаюсь между статической и динамической областью видимости и, следовательно, мне нужен кто-то, чтобы проверить мою оценку. Ниже приведен пример кода:

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

Пожалуйста, дайте мне знать, если я где-то ошибся. Кроме того, было бы здорово, если бы кто-нибудь мог предоставить мне полезную ссылку на примеры статической и динамической области видимости, такие как выше.

Спасибо
Негр

1 Ответ

1 голос
/ 22 июня 2010

Есть количество статей .Google - ваш друг: -)

[Изменить] После прочтения некоторых из этих ссылок, я думаю, что верно следующее:

  1. Для статического определения объема и передачипо значению => 1
  2. Для динамического определения объема и передачи по значению => 1
  3. Для статического определения объема и передачи по ссылке => 4
  4. Длядинамическая область видимости и передача по ссылке => 3

Точка 2 должна возвращать 1, потому что вы передаете по значению, поэтому передаваемый вами x никогда не изменяется.

У Тима Хулихана есть пример, которому легче следовать .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...