Program UsingArrays; Type
MyArray2D = Array [1..10, 5..150] Of Integer; {Описание двухмерного массива) Var Array2D: MyArray2D;{Описание переменной-массива} Begin Array2D [1, 6]:= 18;{Присвоение значение элементу массива с индексами 1, 6} End. Обратите внимание, что максимально возможный размер массивов в Delphi увеличен по сравнению с Pascal, и может достигать 2 гигабайт вместо 64 килобайт. Заметим, что для массивов одного и того же типа, как и для записей, определена операция присвоения, выполняемая копированием значений элементов одного массива в другой. Также доступна операция присвоения для отдельных элементов массивов. Сравнение массивов в целом невозможно и вызывает ошибку компиляции. Однако это доступно динамическим массивам, описанным ниже. Переменную-массив можно описать и без предварительного создания соответствующего типа данных, прямо в разделе описания переменных: Var MyArray2D: Array [1..10, 5..150] Of Integer; {Описание переменной — двухмерного массива целочисленных элементов; Необходимо отметить, что при внешне эквивалентном описании два массива не будут считаться принадлежащими к одному типу данных, если это не указано явно: ?•::ходит по Туре ArrType = Array [1..10] Of Integer; {Описание типа данных — массива целочисленных элементов} Var А1 = Array [1..10] Of Integer; {Описание переменной-массива целочисленных элементов} А2 = Array [1..10] Of Integer; A3: ArrType; A4: ArrType; Begin A3:= A4; Al:= A2; {Описание переменной-массива целочисленных элементов, полностью идентичной А1} {Описание переменной-массива целочисленных элементов} {Операция допустима, так как обе переменные имеют один и тот же тип — ArrType} {Операция не допустима, так как обе переменные имеют не один и тот же тип данных, а лишь похожие по структуре типы} В рассмотренном примере все четыре используемые переменные являются одномерными массивами целочисленных элементов, проиндексированных от 1 до Ю, однако переменные A3 и А4 совместимы между собой, так как при их описании явно указан один и тот же тип, а переменные А1 и А2 не совместимы ни между собой, ни с переменными A3 и А4. Соответственно при попытке компиляции такого фрагмента программы будет выдана ошибка "Incompatible types» - "Несовместимость типов». Однако если бы переменные А1 и А2 были описаны в одной строке, то их типы считались бы идентичными: var Al, A2 Array [1..10] Of Integer; {Описание двух переменных-массивов целочисленных элементов} Begin Al := А2; (Операция допустима)
Динамические структуры данных Для работы с динамическими структурами данных Turbo Pascal предлагал два вида ссылочных типов — типизированные указатели и нетипизи-рованные. Нетипизированный указатель представляет собой переменную, в которой хранится адрес некоторой области памяти некоторого размера, и предназначен для хранения произвольных данных. Типизированные ссылки указывают на место в памяти, где хранятся данные определенного типа. В Delphi сохранены все возможности работы с указателями, а также добавлены новые структуры данных на их основе. 2.4.1. Нетипизированные указатели Переменные -- нетипизированные указатели описываются с указанием типа Pointer, а выделение и освобождение памяти под них осуществляется, соответсвенно, командами GetMem и FreeMem (см. листинг 2.6). Листинг 2.6. Использование нетипизированных переменных-указателей Program UsingPointers; Var Point: Pointer; Begin GetMem(Point, 1024) ; FreeMem(Point, 1024) {Описание переменной-указателя, указан тип Pointer, то есть описывается нетипизированная ссылка! {Выделение памяти под переменную-указатель размером 1024 байт} {Освобождение памяти, занятой под переменную-указатель} End. 2.4.2. Типизированные указатели Использование нетипизированных указателей ограничено стандартными функциями, принимающими такие переменные в качестве параметров, а также низкоуровневым программированием. Более интересными для рассмотрения являются типизированные указатели. Для описания типизированной ссылки не предусмотрен какой-либо специальный тип данных, в отличие от нетипизированных указателей, имеющих тип Pointer. Поскольку ссылочная переменная такого рода всегда указывает на данные конкретного типа, то ее описание и строится на основе этого типа. Для указания на ссылочную природу переменных используется оператор «^», и описание выглядит следующим образом:
Var <Переменная>: ^<названке типа>; Или в разделе описания типов данных: Туре <Новый тип данных> = Л<Тип данных>; После описания переменной-указателя под нее выделяется память только для хранения адреса, а под сами данные, на которые переменная указывает, память не выделяется. Для инициализации переменной используется процедура New, отличием которой от аналогичной процедуры GetMem, используемой для работы с нетипизированными указателями, является отсутствие второго параметра, определяющего размер выделяемой памяти. Это связано с тем, что типизированная ссылка указывает на данные известного типа, соответственно, размер эт^их данных также известен компилятору. Итак, инициализация переменной выглядит следующим образом: New(<Типизированный указатель>); Соответственно, при освобождении памяти, занятой под типизированный указатель, используется процедура Dispose — аналог процедуры FreeMem без второго параметра: Dispose(<Типизированный указатель>); Обращение к переменной-указателю происходит обычным образом — по ее имени, а для обращения к данным, на которые переменная указывает, после имени переменной указывается оператор разыменовывания «л»: <Название переменной>А Рассмотрим пример работы с типизированной ссылкой, указывающей на переменную типа Double (см. листинг 2.7). Begin New(MyPDouble); {Выде.-.е.-.-.^ переуе:-н;'.-: опреде~ =-■; ~ памятх з z .- MyPDoubleA= 12.{Приев: е-" ссылает ; -. Dispose(MyPDoubi End. котору:-: освобож MyPDoub 2.4.3. В Delphi добавлена ин зания размерностей и. Var IntArray: Array Такие массивы являю длину. Установка разм ния программы произ ций SetLengthи Lencмеруются от нуля. Program UsingDyna Var А, В: Array of
Популярное: Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... ©2015-2020 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (573)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |