Point1 Point2

Наложение масок с помощью указателей

Открытые массивы

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

...  
var { фактические параметры - }
Ar1: array[1..100] of integer; { интерпретируемые }
Ar2: array[1..1000] of integer; { области памяти }
s: integer;  
   
Procedure Sum(var X: array of integer; { X – окрытый массив, его тип – }
var summa: integer); { маска }
Var i: word;  
begin  
summa:=0;  
for i:=0 to high(X) do { интерпретация элементов массива }
summa:=summa + X[i]; { через маску }
end  
   
begin  
...  
Sum(Ar1,s); writeln(s);  
Sum(Ar2,s); writeln(s);  
...  
       

Наиболее общим методом совмещения типов является явное наложение масок с помощью указателей без использования специальных средств, встроенных в язык.

Алгоритм наложения маски с помощью указателя:

¨ определить тип маски;

¨ определить тип указателя, связанного с маской;

¨ определить переменную - типизированный указатель, связанный с маской;

¨ задать интерпретируемую область памяти;

¨ произвести наложение маски с помощью типизированного указателя. Наложение маски выполняется с помощью занесения адреса интерпретируемой области памяти в переменную-типизированный указатель, связанный с соответствущей маской. Через этот указатель открывается доступ к области памяти;

¨ выполнить интерпретацию области памяти через маску с использованием операции раскрытия ссылки.

Выполнение этого алгоритма иллюстрирует рис. 53.

 
 


X: =10 X: = 20

Y: =20 Y: = 10


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: