русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Динамические типы данных. Простейшие действия с указателями.


Дата добавления: 2015-01-16; просмотров: 1802; Нарушение авторских прав


Когда транслятор анализирует разделы var в программе, он отводит для каждой переменной соответствующее число ячеек памяти и закрепляет их за данной переменной на все время работы блока. Такие переменные называют статическими. Они не могут быть использованы системой под другие нужды, даже если в процессе дальнейшей работы программы эти переменные больше не понадобятся.

Данные можно представить в памяти компьютера по-другому. Данные можно хранить в некоторой области памяти, не обозначая именем переменной, а используя ссылку на эту область (переменные ссылочного типа – указатели имеют значения адресов некоторой области памяти). Такой вид организации данных позволяет динамически захватывать и освобождать память в процессе работы блока программы. Поэтому и сами переменные, которые могут создаваться и ликвидироваться по мере надобности, называют динамическими.

Ссылочный тип данных:

 

Type <имя ссылочного типа>=^<имя базового типа>

Пример:

Type Ptr1 = ^char;

Mas= array[1..30] of real;

Pmas= ^mas;

Резервирование места в памяти под динамическую переменную и засылка ее адреса в ссылочную переменную R выполняется при обращении new(R). При этом выделяется столько ячеек памяти, сколько требует динамическая переменная, с которой связана R. Эти все данные система получает из раздела описания типов в программе.

Динамические переменные, созданные посредством процедуры new(R), называют также указанными переменными (указатель R).

Пример.Пусть переменная R имеет тип point. Тогда при обращении к процедуре new(R) будет создана указанная переменная, в которой предусмотрено поле под значение типа integer и поле ссылки. При этом ссылочная переменная R содержит адрес указанной переменной. Через R^ обозначается сама указанная переменная; R^.I – поле целого значения I; R^. P – поле ссылки P.



 

Имена динамических объектов записываются с крышечкой. Значения этих объектов хранятся, пока не очищена динамическая память.

Имя динамического объекта не является идентификатором, значит оно выражение.

Операции над указателями:

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

Еще раз повторим правила присваивания указателей:

  • любому указателю можно присвоить стандартную константу nil, которая означает, что указатель не ссылается на какую-либо конкретную ячейку памяти;
  • указатели стандартного типа pointer совместимы с указателями любого типа;
  • указателю на конкретный тип данных можно присвоить только значение указателя того же или стандартного типа данных.

Указатели можно сравнивать на равенство и неравенство, например:

If p1=p2 then …..
If p1<>p2 then …..

После того, как динамическая переменная объявлена, ей можно присваивать значения, изменять их, использовать в выражениях и т.д. Для этого используют следующее обращение: переменная_указатель^. Такое обращение называется операция разадресации (разыменования). Таким образом происходит обращение к значению, на которое указывает указатель, т.е. к данным. Если же за переменной_указателем значок ^ не стоит, то имеется в виду адрес, по которому расположены данные.

Динамически размещенные данные можно использовать в любом месте программы, где допустимо использование выражений соответствующего типа.

Например:

R^:= sqr( R^) + I^ -17;
q^:= 2; inc(q^); writeln(q^)

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

Адрес --->R:= sqr( R^) + I^ -17 <---вещественное выражение.
Вещественная переменная --->R^:= sqr( R) <---аргумент – адрес.

Специальная операция @(присваивание адреса) ориентирует переменную-указатель на область памяти, содержащую уже существующую переменную. Эту операцию можно применять для ориентации на статическую и динамическую переменную.
Например,

type A=array[0..99] of char;
var X: array [0..49] of integer;
pA:^ A; {указатель на массив символов}

Объявлены переменные разных типов: массив из 50 целых чисел и указатель на массив символов. Чтобы указатель pA указывал на массив X, надо присвоить ему адрес X

pA:= @ X;

Динамическая переменная, созданная процедурой New, может быть «стерта» только процедурой Dispose.

Общий вид:

dispose(R);

Здесь R – ссылочная переменная, указывающая на ту динамическую переменную, которую следует стереть. После стирания динамической переменной R^ нельзя использовать значение R, такая ошибка может привести к порче памяти и другим серьезным последствиям.

Динамические переменные, не стертые посредством Dispose, продолжают занимать место в памяти после окончания работы соответствующего блока программы (становятся «мусором»). Поэтому необходимо все лишние динамические переменные стереть перед окончанием работы блока.

 



<== предыдущая лекция | следующая лекция ==>
Область действия переменных при использовании подпрограмм. | Создание и обработка динамических списков


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.007 сек.