Лекция 01. Тема Общая характеристика языков программирования высокого уровня


Download 4.1 Mb.
Pdf ko'rish
bet37/57
Sana12.11.2023
Hajmi4.1 Mb.
#1767546
TuriЛекция
1   ...   33   34   35   36   37   38   39   40   ...   57
Bog'liq
Lektsii po YaP Lukinova 2 sem

Параметры-массивы 
Часто возникает необходимость в подпрограмму как формальный 
параметр передать массив. Некоторые языки не позволяют это сделать 
напрямую, например, Pascal, не позволяет сделать следующее описание:
Procedure S ( a : array[1..10] of real);
Для преодоления указанной сложности разработчики языка Pascal ввели
возможность описания нового нестандартного типа данных:
Type <имя типа> = <описатель типа>;
Например,
type
vector = array [1..10] of real;
Здесь vector имя нестандартного типа, который теперь cуществует в 
пользовательской программе наряду со стандартными real, integer, char и 
другими, и который можно использовать и при описании переменных в 
операторе var, и в заголовках процедур и функций:
Program ;
type
vector = array [1..10] of real;
var d : vector;
Procedure S ( a : vector );
. . . . . . . . . . .
Разработчики С-подобных языков нашли другой способ: массивы в 
качестве параметров функций передаются через указатели.


Тема 4. Лекция Д6 (11) 
4.3. Режимы и модели передачи данных через параметры 
Передача данных между фактическим и формальным параметрами 
может происходить в 3-х режимах:
1. Режим ввода (In) – формальный параметр только получает данные от 
фактического (только входные);
2. Режим вывода (Out) – формальный параметр только передает данные 
фактическому (только выходные);
3. Режим ввода-вывода (InOut) – формальный параметр может и 
получать, и передавать данные фактическому (быть и входным и выходным).
 Модели реализации режимов передачи данных с помощью механизма 
параметров 
Существует несколько моделей реализаций указанных режимов 
передачи параметров.
1. Модель передачи по значению
Реализует режим ввода и означает:
а) реальное копирование значения фактического параметра в ячейку 
формального, который становится реальной локальной переменной. 
Надежный способ, но копирование может быть дорогим и по времени, и по 
памяти (требуется хранить 2 копии), если передаем большой массив.
б) передача пути доступа к значению фактической переменной в 
вызывающей программе, и при этом фактическая переменная блокируется на 
запись (например, C++): можно только читать из нее. Защита от записи 
может оказаться сложным делом, особенно, если передавать параметр по 
иерархии подпрограмм.
2. Модель передачи по результату
Реализует режим вывода. Реализуется аналогично п.1.: копированием 
формальной переменной в фактическую или передачей пути доступа. При 
этом возможна следующая проблема. 


Пусть подпрограмма имеет выходной параметр list[i]. Возникает вопрос, 
когда вычислять адрес фактической переменной: во время вызова 
подпрограммы или при возвращении из нее. Если переменная i изменяется во 
время выполнения процедуры, то и адрес list[i] на входе в подпрограмму и на 
выходе из нее будет разный.
3. Модель передачи по значению и по результату
Режим ввода-вывода. Комбинация передач по значению и по результату. 
Фактически при этом формальные параметры должны храниться в локальной 
области процедуры, и дважды делается копирование: в них и из них.
4. Модель передачи по ссылке
Реализация режима ввода-вывода, заключается в передачи пути доступа 
(адреса) фактической переменной в подпрограмму. Эффективна по времени и 
по объему памяти, поэтому находит реализацию во многих языках. 
Недостаток заключается в возможности совмещения имен (альтернативные 
имена). Ниже приведены примеры таких ситуаций.

Download 4.1 Mb.

Do'stlaringiz bilan baham:
1   ...   33   34   35   36   37   38   39   40   ...   57




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling