Оператор @ с переменной
Использование @ с обычной переменной (не параметром процедуры) несложно.
Например, можно задать декларацию
Type
A = Array [0..99] of char; {Тип массива символов}
Var
X : Array [0..49] of integer; {Массив целых чисел}
pA : ^A; {Указатель на массив символов}
Объявлены переменные двух разных типов: массива целых из 50 элементов и ссылочного на тип А (массив из 100 символов). Чтобы указатель рА указывал на массив Х, надо присвоить ему адрес Х:
рА := @Х; {Указатель на массив целых чисел}
Теперь pA^ ссылается на массив целых, но по своей природе он указатель на массив символов, поэтому при обращении pA^[i] мы получаем содержимое отдельных байтов массива Х в символьной форме.
Пример. Компонентам массива целых присваиваются сдвинутые на 65 значения индекса, печатается массив целых. Переменной-указателю на символьный массив присваивается адрес массива целых. Снова распечатывается массив, но по адресам значений. Вместо последовательности чисел будет напечатана последовательность ASCII символов от А до z с пробелами.
Program ReInterpretation;
{Интерпретация массива целых чисел как массива из символов}
Uses
Crt;
Type
A = Array [0..99] of char; {Тип A – массив 100 символов}
Var
X : Array [0..49] of integer; {Массив целых чисел}
pA : ^A; {Указатель на массив символов}
i : integer;
Begin
ClrScr;
for i := 0 to 49 do
begin
X[i] := 65+i {65 – код буквы А}
write(X[i], ' '); {Печать чисел}
End;
pA := @X; {Указателю на А присваивается адрес массива целых чисел}
writeln;
for i := 0 to 99 do
write(pA^[i],' '); {Печать символов}
End.
Попытка исполнить последний оператор до оператора pA := @X привела бы к ошибке, поскольку указатель на массив был бы не опpеделен. Массив Х имеет значения 65..114, которые не выходят за пределы младшего байта двухбайтовых элементов типа word. В старших байтах этой переменной – нули. При побайтной печати массива младшие байты выводятся как буквы алфавита, а старшие – как символ #0, который процедурой write интерпретируется как пробел.
Задание. Наберите программу, откомпилируйте ее и проверьте действие.
Дата добавления: 2015-05-16; просмотров: 705;