|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Преобразование типовРАБОТА С ДИНАМИЧЕСКОЙ ОБЛАСТЮ ПАМЯТИ. ССЫЛОЧНЫЙ ТИП ДАННЫХ
Цели: § Знакомство и работа с динамической областью памяти; § Работа с ссылочным переменными ссылочного типа(указателями).
Данные, хранящиеся в памяти ЭВМ представляют собой совокупность нулей и единиц (битов). Биты объединяются в последовательности: байты, слова и т.д. Каждому участку оперативной памяти, который может вместить один байт или слово, присваивается порядковый номер (адрес). Для работы с адресами используется специальный тип данных – указатель. Указатели указывают на область памяти, в которой хранятся конкретные данные какого-либо базового типа. Различают указатели двух типов: типизированные и нетипизированные. Типизированные указатели содержат адреса, по которым в памяти размещаются данные определенных типов. TYPE Tpi=^integer; {указатель на данные целого типа} VAR pi:Tpi; P:^integer; Нетипизированные указатели хранят просто адреса, которые не связаны с данными конкретных типов. Для их объявления используют зарезервированное слово pointer. VAR p:pointer;
Для указателей, которые не хранят никаких адресов, введена константа «нулевой адрес», которая принимает значение nil. Значение nil можно присваивать указателю любого типа.
Получение адреса (@) Результат операции – указатель типа pointer, который можно присвоить любому указателю, как типизированному так и нетипизированному. VAR i:integer; P:^integer;… … P:=@i; {указатель Р будет содержать адрес переменной i}
Чтобы получить доступ к переменной по указателю, необходимо после типизированного указателя поставить знак «^». Полученное значение имеет тип, совпадающий с базовым типом указателя.
Нетипизированные указатели разыменовывать нельзя!
Пример 1 Пример взятия данных по адресу. VAR I:real; Uk:^real; {указатель на данные вещественного типа} Begin I:=0.25; Uk:=@i; {указательUk будет содержать адрес переменой I} Writeln (Uk^); {извлечение данных, расположенных по адресу Uk} Uk^:=Uk^+2; Writeln (Uk^); { 2.25} End. Преобразование типов Типизированный указатель адресует вполне определенную область памяти определенной длины, соответствующей базовому типу. Если указателям разного типа присвоить один и тот же адрес, то каждый из них будет рассматривать содержимое области памяти в соответствии с внутренним представлением своего типа. Эта особенность указателей позволяет использовать их для неявного преобразования типа. Необходимо помнить, что для присвоения разнотипным указателям одного и того же адреса следует использовать нетипизированные указатели, либо задавать абсолютное значение требуемого адреса. Пример 2 uses CRT; var i:integer; ch:char; p:^integer; r:^real; c:^char; begin i:=12; p:=@i; r:=@i; c:=@i; writeln(p^); writeln(r^); writeln(C^); ch:='A'; p:=@ch; writeln(p^); End. Пример 3 type mas=array[1..4]of byte; Var l:real; k:byte; p1:^mas; Begin l:=123456789; p1:=@l; for k:=1 to 4 do write(p1^[k]); {0,0,0,8,4} end.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |