Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
инфа_ответы.doc
Скачиваний:
6
Добавлен:
24.09.2019
Размер:
137.22 Кб
Скачать

22.Локальные и глобальные переменные.

Локальные переменные- это переменные которые видны только тому куску программы (функции, процедуры) в котором они записаны.

Глобальные переменные – это переменные которые задаются в теле самой программы, и к ним можно обращаться отовсюду, к этим переменные видны всей программе. (все объекты описанные после слова программ до объявления процедуры или функций наз-ся глобальными, и они доступны внутри самой процедуры, функции и доступны само программе.)

Использование глобальных перемен внешне упрощает работу, все нужные переменные видны отовсюду. Но с другой стороны использование глобальных перемен- плохо.

-Переменные работают только с исходными данными, если приходиться решать задачу с другими исходными данными, то придётся писать ещё одну процедуру.

-в процедуре основной программы возможно изменение глобальных перемен, и если процедур много, то весьма затруднительно найти, то место где это произошло.

Это приводит к снижению надёжности программы и повышению стоимости.

25. Способы передачи параметров. Правило согласования формальных и фактических параметров.

Сравнение.

Существует несколько способов передачи параметров в подпрограмму.

Передача параметров по имени. В формальный параметр может быть помещено произвольное выражение. При этом вычисление этого выражения произойдёт внутри подпрограммы в тот момент, когда потребуется его значение. Если это значение фигурирует несколько раз, то и вычисляться оно будет тоже несколько раз. Параметры, передаваемые по имени, дают возможность писать довольно универсальные подпрограммы. Такой способ передачи параметров используется, к примеру в языках Алгол или Алгол 68.

Передача параметров через стек. Это фактически разновидность передачи параметра по значению «с ручным приводом», в данном случае отсутствует понятие формальных и фактических параметров. Все параметры лежат на стеке, причём их типы, количество и порядок не контролируются компилятором. Данный подход реализован в языке Форт.

Язык программирования может предоставлять возможность передавать параметры в подпрограммы либо только по значению (так сделано в языке Си), либо по значению и по ссылке (это реализовано в Паскале, Аде, C++), либо по имени и значению (это реализовано в языках Алгол и Алгол 68). В последних двух случаях для различения способов передачи параметра используются отдельные синтаксическая конструкции (в Паскале это ключевое слово var при описании параметра). В действительности, если язык содержит понятие ссылки (указателя), то можно обойтись и без передачи параметра по ссылке (её всегда можно смоделировать, описав параметр типа «ссылка»), но эта возможность удобна, так как позволяет работать с формальным параметром-ссылкой без разыменования, а также повышает надёжность и безопасность программы.

На параметры, передаваемые по ссылке, накладываются естественные ограничения: фактический параметр, подставляемый на место такого параметра при вызове, обязан быть переменной (то есть иметь адрес), а в языках со строгой типизацией — ещё и иметь в точности такой же тип данных.

Передача по значению.

Передача параметров по значению. Формальному параметру присваивается значение фактического параметра. В этом случае формальный параметр будет содержать копию значения, имеющегося в фактическом, и никакое воздействие, производимое внутри подпрограммы на формальные параметры, не отражается на параметрах фактических. Так, если в качестве фактического параметра будет использована переменная, и внутри подпрограммы значение соответствующего формального параметра будет изменено, то фактический параметр останется без изменений.

int func1(int x) { x=x+1; return x; }

Передача по ссылке.

Передача параметров по ссылке. В формальный параметр может быть помещён сам фактический параметр (обычно это реализуется путём помещения в формальный параметр ссылки на фактический). При этом любое изменение формального параметра в подпрограмме отразится на фактическом параметре — оба параметра во время вызова подпрограммы суть одно и то же. Параметры, передаваемые по ссылке, дают возможность не только передавать параметры внутрь подпрограммы, но и возвращать вычисленные значения в точку вызова. Для этого параметру внутри подпрограммы просто присваивается нужное значение, и после возврата из подпрограммы переменная, использованная в качестве фактического параметра, получает это значение.

void func2(int &x) { x=x+1; }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]