Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Топ:
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Интересное:
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Наиболее общим методом совмещения типов является явное наложение масок с помощью указателей без использования специальных средств, встроенных в язык.
Алгоритм наложения маски с помощью указателя:
¨ определить тип маски;
¨ определить тип указателя, связанного с маской;
¨ определить переменную - типизированный указатель, связанный с маской;
¨ задать интерпретируемую область памяти;
¨ произвести наложение маски с помощью типизированного указателя. Наложение маски выполняется с помощью занесения адреса интерпретируемой области памяти в переменную-типизированный указатель, связанный с соответствущей маской. Через этот указатель открывается доступ к области памяти;
¨ выполнить интерпретацию области памяти через маску с использованием операции раскрытия ссылки.
Выполнение этого алгоритма иллюстрирует рис. 53.
Point1 Point2
![]() |
X: =10 X: = 20
Y: =20 Y: = 10
Рис. 53. Наложение масок с помощью указателей
| Type | ||||
| Point1 = record | { маска 1 } | |||
| x,y: word | ||||
| end; | ||||
| Pnt1 = ^ Point1; | { тип указателя, связанного с маской 1 } | |||
|
| ||||
| Point2 = record | { маска 2 } | |||
| y,x: word | ||||
| end; | ||||
| Pnt2 = ^ Point2; | { тип указателя, связанного с маской 2 } | |||
|
| ||||
| Var | ||||
| S: array[1..2] of word; | { интерпретируемая область памяти } | |||
| p1: Pnt1; p2: Pnt2; | { типизированные указатели для наложения масок } | |||
| x, y: word; | ||||
|
| ||||
| begin | ||||
| S[1]:=10; s[2]:=20; | { инициализация интерпретируемой области памяти } | |||
| p1:=@ S; | { наложение маски 1 } | |||
| x:=p1^.x; y:=p1^.y; | { интерпретация области памяти через маску 1: x =10; y = 20; } | |||
| ... | ||||
| p2:=@ S; | { наложение маски 2 } | |||
| x:=p2^.x; y:=p2^.y; | { интерпретация области памяти через маску 2: x =20; y = 10; } | |||
| ... | ||||
Наложение масок с помощью указателей широко используется для создания динамических массивов переменной длины. При создании динамических массивов переменной длины память выделяется динамически в зависимости от размера массива. Интерпретация области памяти, отведенной под динамический массив, осуществляется через маску. Размерность маски рекомендуется выбирать так, чтобы она была рассчитана на максимальное количество данных интерпретируемого типа, которое может разместиться в пределах сегмента.
| ... |
| ||||
| Type |
| ||||
| Mas = array[1..10000] of word; | { маска } | ||||
| PMas = ^ Mas; | { типизированный указатель, связанный с маской } | ||||
|
|
| ||||
| var |
| ||||
| P: PMas; | { указатель для наложения маски } | ||||
| A: Pointer; | { адрес области памяти, выделенной для массива переменной длины } | ||||
| n: word; | { истинный размер массива } | ||||
| i: word; |
| ||||
|
|
| ||||
| begin |
| ||||
| write (“введите размерность массива = ”); readln(n); | |||||
| getmem(A, n * sizeof(word)); | { динамическое выделение области памяти для массива } | ||||
| p:=A; | { наложение маски } | ||||
| for i:=1 to n do readln(p^[i]); | { интерпретация области памяти через маску } | ||||
| ... |
| ||||
При использовании динамических массивов переменной длины следует обратить особое внимание на соотношение между верхней границей маски и верхней границей массива. При этом возможны две ситуации:
1. Число элементов динамического массива N больше верхней границы маски.
![]() |
При попытке обратиться к элементу массива с номером, большим верхней границы маски, будет зафиксирована ошибка времени исполнения - выход за пределы верхней границы массива.
2. Число элементов динамического массива N меньше верхней границы маски.
![]() |
При обращении к элементу массива с номером, большим N, ошибка времени исполнения не фиксируется, а происходит попадание в область памяти, не принадлежащую массиву размером N, но интерпретируемую через маску. В результате данные, которые располагаются сразу за массивом, могут быть испорчены.
6. рекурсивные структуры данных
|
|
|
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!