Pas-pg.dos/Tpw4 icon

Pas-pg.dos/Tpw4



НазваниеPas-pg.dos/Tpw4
Дата конвертации28.08.2012
Размер18.5 Kb.
ТипДокументы
1. /Pas-pg.dos/Cont.txt
2. /Pas-pg.dos/Tpw1.txt
3. /Pas-pg.dos/Tpw10.txt
4. /Pas-pg.dos/Tpw11.txt
5. /Pas-pg.dos/Tpw12.txt
6. /Pas-pg.dos/Tpw13.txt
7. /Pas-pg.dos/Tpw14.txt
8. /Pas-pg.dos/Tpw15.txt
9. /Pas-pg.dos/Tpw16.txt
10. /Pas-pg.dos/Tpw17.txt
11. /Pas-pg.dos/Tpw18.txt
12. /Pas-pg.dos/Tpw19.txt
13. /Pas-pg.dos/Tpw2.txt
14. /Pas-pg.dos/Tpw20.txt
15. /Pas-pg.dos/Tpw21.txt
16. /Pas-pg.dos/Tpw22.txt
17. /Pas-pg.dos/Tpw23.txt
18. /Pas-pg.dos/Tpw24_1.txt
19. /Pas-pg.dos/Tpw24_2.txt
20. /Pas-pg.dos/Tpw3.txt
21. /Pas-pg.dos/Tpw4.txt
22. /Pas-pg.dos/Tpw5.txt
23. /Pas-pg.dos/Tpw6.txt
24. /Pas-pg.dos/Tpw7.txt
25. /Pas-pg.dos/Tpw8.txt
26. /Pas-pg.dos/Tpw9.txt
27. /Pas-pg.dos/Tpwa.txt
28. /Pas-pg.dos/Tpwb.txt
29. /Pas-pg.dos/Tpwin.txt
1╛л<zРРРРРC:\WORD55\NORMAL.STYSITIZENСРРР^Глава 4. Переменные
Описания переменных
Описание переменной представляет собой список идентификаторов, которые обозначают новые переменные и их типы.
┌─────────┐ ╒═╕ ┌───┐ ╒═╕ описание───│список ├──│:│──│тип├─┬──────────────────│;│─── переменной │идентифи-│ ╘═╛ └───┘ │  ╘═╛ │каторов │ │ ┌───────────┐ │ └─────────┘ └─│ оператор ├─┘ │ absolute │ └───────────┘ Тип, задаваемый для переменных, может быть идентификатором типа, который был ранее описан в разделе описания типов того же самого блока, или блока, в который входит данный блок, или модуля, или же этот тип может быть новым определением типа. При указании идентификатора в списке идентификаторов описания переменной этот идентификатор имеет силу идентификатора переменной в том блоке, где это описание было указано. К этой переменной можно обращаться из любого места этого блока, если ее идентификатор не переопределен в блоке, входящем в первый. Переопределение означает, что для новой переменной используется тот же самый идентификатор, но это использование не оказывает влияния на значение первоначальной переменной. Приведем пример раздела описания переменной: var X,Y,Z: real; I,J,K: integer; Digit: 0..9; C: Color; Done,Error: boolean; Operator: (plus, minus, times); Hue1,Hue2: set of Color; Today: Date; Results: MeasureList; P1,P2: Person; Matrix: array[1..10,1..10] of real; Переменные, описанные вне процедуры и функции, называются глобальными переменными и располагаются в сегменте данных. Переменные, описанные в самой процедуре или функции, называются локальными переменными и располагаются в сегменте стека. Сегмент данных Максимальный размер сегмента данных равен 65520 байт. При компоновке программы (что автоматически осуществляется в конце компиляции программы) глобальные переменные всех модулей, используемых программой, а также собственные глобальные переменные программы размещаются в сегменте данных. Если для глобальных переменных требуется более 65520 байт, то следует распределить большие структуры в виде динамических переменных. Примечание: Дальнейшее описание этой темы можно найти в разделе "Указатели и динамические переменные" настоящей главы. Сегмент стека Размер сегмента стека устанавливается с помощью директивы компилятора $M и лежит в пределах от 1024 до 65520 байт. По умолчанию размер стека равен 8192 байтам. При каждой активизации (вызове) процедуры или функции в стек помещается множество локальных переменных. При завершении работы память, занимаемая локальными переменными, освобождается. В любой момент выполнения программы общий размер локальных переменных в активных процедурах и функциях не должен превышать размера сегмента стека. Директива компилятора $S используется для проведения проверок переполнения стека в программе. В состоянии {$S+}, принятом по умолчанию, генерируется код, осуществляющий проверку переполнения стека в начале каждой процедуры или функции. В состоянии {$S-} такие проверки не проводятся. Переполнение стека может вызвать аварийное завершение работы системы, поэтому не следует отменять проверки стека, если нет абсолютной уверенности в том, что переполнения не произойдет. Абсолютные переменные Переменные можно описать так, что они будут располагаться по определенному адресу в памяти, и в этом случае они называются абсолютными переменными. Описание таких переменных должно содержать после типа оператор absolute: ╒════════╕ ┌─────────┐ ╒═╕ ┌─────────┐ оператор ───│absolute├┬─│целое без│──│:├──┤целое без├──────── absolute ╘════════╛│ │знака │ ╘═╛ │знака │  │ └─────────┘ └─────────┘ │ │ ┌────────────────────────┐ │ └───│идентификатор переменной│───┘ └────────────────────────┘ Отметим, что список идентификаторов в описании переменной при указании оператора absolute может содержать только один идентификатор. Первая часть оператора absolute содержит сегмент и смещение, то есть адрес, по которому переменная должна быть размещена. CrtMode : byte absolute $0040:$0049; Первая константа обозначает базу сегмента, а вторая определяет смещение внутри этого сегмента. Обе константы не должны выходить за пределы диапазона от $0000 до $FFFF (от 0 до 65535). Вторая часть оператора absolute используется для описания переменной, которая помещается "поверх" другой переменной, то есть по тому же самому адресу, что и другая переменная. var Str: string[32]; StrLen: byte absolute Str; Это описание указывает, что переменная StrLen должна размещаться с того же адреса, что и переменная Str, а поскольку первый байт строковой переменной содержит динамическую длину строки, то StrLen будет содержать длину Str. Ссылки на переменные Ссылка на переменную может обозначать следующее: - переменную; - компонент в переменной структурного или строкового типа; - динамическую переменную, на которую указывает переменная типa указатель. Синтаксис ссылки на переменную имеет вид: ┌─────────────┐ ссылка на────┬──│идентификатор├───────────────────────────┬───── переменную │ │переменной │   │ │ └─────────────┘ │ │ ┌────────────┐ │ │ ┌───────────────┐ │ └─│квалификатор│─┘ ├──│приведенный тип├─────┤ └────────────┘ │ │переменной │ │ │ └───────────────┘ │ │ ┌─────────────┐ ╒═╕ │ └──│вызов функции├──│^├─┘ └─────────────┘ ╘═╛ Отметим, что синтаксис ссылки на переменную допускает использовние вызова функции в качестве указателя-функции. Полученный в результате указатель затем разыменовывается с тем, чтобы обозначать динамическую переменную. Квалификаторы Обращение к функции представляет собой идентификатор переменной с несколькими квалификаторами или без них, которые изменяют значение обращения к функции. ┌──────┐ квалификатор────┬│индекс│───────────────────── │ └──────┘  │ ┌───────────────┐ │ ├──│десигнатор поля├───┤ │ └───────────────┘ │ │ ╒═╕ │ └──────────│^├─────────┘ ╘═╛ Идентификатор массива без квалификатора является ссылкой на весь массив, например: Results Идентификатор массива с указанным индексом обозначает конкретный элемент массива, в данном случае структурную переменную: Results[Current+1] В случае, если элементом является запись, за индексом можно указать обозначение поля. В этом случае ссылка на переменную означает конкретное поле конкретного элемента массива: Results[Current+1].data Чтобы указать различие между указателем-полем и динамической переменной, на которую он указывает, за десигнатором поля в указателе-поле может следовать символ указателя (^). Results[Current+1].data^ Если переменная, на которую имеется ссылка, является массивом, то можно добавить индексы для обозначения компонентов этого массива. Results[Current+1].data^[J] Массивы, строки и индексы Конкретный элемент массива обозначается с помощью ссылки на переменную массива, за которой указывается индекс, определяющий данный элемент. Конкретный символ в строковой переменной обозначается с помощью ссылки на строковую переменную, за которой указывается индекс, определяющий позицию символа. ╒═╕ ┌─────────┐ ╒═╕ индекс───│[├─────│выражение├───┬───│]├─────────────── ╘═╛  └─────────┘ │ ╘═╛ │ ╒═╕ │ └─────┤,│───────┘ ╘═╛ Индексные выражения обозначают компоненты в соответствующей размерности массива. Число выражений не должно превышать числа индексных типов в описании массива. Более того, тип каждого выражения должен быть совместимым по присваиванию с соответствующим индексным типом. В случае многомерного массива можно использовать несколько индексов или несколько выражений в индексе. Например: Matrix[I][J] что тождественно записи: Matrix[I,J] Строковую переменную можно проиндексировать с помощью одиночного индексного выражения, значение которого должно быть в диапазоне 0...n, где n - указанный в описании размер строки. Это дает доступ к каждому символу в строковом значении, если значение символа имеет тип char. Первый символ строковой переменной (индекс 0) содержит динамическую длину строки, то есть Length(S) тождественно Ord(S[0]). Если атрибуту длины присваивается значение, то компилятор не проверяет, меньше ли это значение описанного размера строки. Вы можете указать индекс строки и вне ее текущей динамической длины. В этом случае считываемые символы будут случайными, а присваивания вне текущей длины не повлияют на действительное значение строковой переменной. При разрешении с помощью директивы компилятора {$X+} расширенного синтаксиса значение типа PChar может индексироваться c помощью одиночного индексного выражения типа Word. Индексное выражение задает добавляемое к указателю символа перед его разыменованием для получения ссылки на переменную типа Char смещение. Примечание: Более подробно о типе PChar рассказывается в Главе 13 "Модуль Strings". Записи и десигнаторы полей Конкретное поле переменной-записи обозначается с помощью ссылки на переменную-запись, после которой указывается обозначение поля, специфицирующее это поле. ╒═╕ ┌──────────────────┐ десигнаторы полей────│.├───│идентификатор поля├────────── ╘═╛ └──────────────────┘ Приведем несколько примеров десигнаторов полей: Today.year Results[1].count Result[1].when.month В операторе, входящем в оператор with, обозначению поля не должна предшествовать ссылка на переменную, содержащую запись. Десигнаторы компонентов объекта Формат десигнатора компонента объекта совпадает с форматом десигнатора поля записи. То есть, он состоит из экземпляра (ссылки на переменную), за которым следует точка и идентификатор компонента. Десигнатор компонента, который обозначает метод, называется десигнатором метода. К экземпляру объектного типа можно применить оператор with. В этом случае при ссылке на компоненты объектного типа экземпляр и точку можно опустить. Экземпляр и точку можно опустить также в любом блоке метода. При этом эффект будет тот же, что и при записи перед ссылкой на компонент Self и точки. Переменные-указатели и динамические переменные Значением переменной-указателя является или nil (то есть пустое значение), или адрес значения, указывающий на динамическую переменную. Ссылка на динамическую переменную, на которую указывает переменная-указатель, записывается в виде переменной-указателя, после которой ставится символ указателя (^). Динамические переменные и значения их указателей создаются с помощью стандартных процедур New и GetMem. Для создания значений указателя, которые рассматриваются как указатели динамических переменных, вы можете использовать операцию @ и стандартную функцию Ptr. Значение nil не указывает ни на какую переменную. Если вы попытаетесь получить доступ к динамической переменной при неопределенном значении указателя или указателе, равном nil, результат будет неопределенным. Приведем несколько примеров ссылок на динамические переменные: P1^ P1.sibling^ Results[1].data^ Приведение типов переменных Ссылка на переменную одного типа может быть преобразована в ссылку на переменную другого типа с помощью приведения типов переменных. ┌─────────────┐ ╒═╕ ┌──────────┐ ╒═╕ приведение типа──│идентификатор│──│(├──│ссылка на │──│)├──── переменной │типа │ ╘═╛ │переменную│ ╘═╛ └─────────────┘ └──────────┘ Когда приведение типов применяется к ссылке на переменную, ссылка на переменную рассматривается как экземпляр типа, представленного идентификатором типа. Размер переменной (число байт, занимаемых переменной) должен быть равен размеру типа, представленного идентификатором типа. После приведения типа переменной можно указать один или несколько квалификаторов типа (если это допускается указанным типом). Приведем несколько примеров приведения типов переменных: type ByteRec = record lo, hi: byte; end; WordRec = record low, high: word; end; PtrRec = record ofs, seg: word; end; BytePtr = ^Byte; var B: byte; W: word; L: longint; P: pointer; begin W := $1234; B := ByteRec(W).lo; ByteRec(W).hi := 0; L := $1234567; W := WordRec(L).lo; B := BytePtr(L)^; P := Ptr($40,$49); W := PtrRec(P).seg; Inc(PtrRec(P).seg; end. Обратите внимание на использование для доступа к младшим и старшим байтам слова типа ByteRec: это соответствует встроенным функциям Lo и Hi, только над левой частью в операции присваивание может выполняться приведение типа. Отметим также, что для доступа к младшим и старшим словам длинного целого типа (LongInt), а также к смещению и адресу сегмента указателя используются типы WordRec и PtrRec. Турбо Паскаль также полностью поддерживает приведение типов для процедурных типов. Например, имея такие описания: type Func = function(X: Integer): Integer; var F: Func; P: Pointer; N: Integer; вы можете построить следующие присваивания: F := Func(P); { присвоить F значение процедурного типа в P } Func(P) := F; { присвоить P значение процедурного типа в F } @F := P; { присвоить F значение-указатель в P } P := @F; { присвоить P значение-указатель в F } N := F(N); { вызвать функцию через F } N := Func(P)(N); { вызвать функцию через P } Обратите в частности внимание на операцию получения адреса @, которая применяется к переменной процедурного типа. Ее можно использовать в левой части присваивания. Кроме того, отметьте приведение типа на последней строке при вызове функции через переменную-указатель. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄А<  ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄АХkкk[Z  Ю  ▐    ▄▄▄▄▄▄▄<7ЁЁ<ЁЁT  Н  ╞  ╚  ┴  е  ╪  ┌  ф  ∙  Ё ∙  &  8  U  }  Ю  │  ╤  ш    Ё      4  6  \   ш   f   П   С   8   Ё 8 К   f  У  Х  y  0  l  и  ф    Ё   к  +  X  Z    ╨  ┌  є    Ё   ■  *  ,  c  w  ╕     :  <  Ё <_  д  у  "  a  Э  ╚  є    I  Ё Ir  t  U  ~  А  !  B  y  й  ┘  Ё ┘   9  i  Щ  ┐  ┴    )  +  м  Ё м┼  ╟  ~  Ь  Ю  S  s  u    #  Ё #%  T  V  щ  Н   ╜   ¤   -!  V!  !  Ё !Я!  б!  ┤"  ,#  ?#  [#  m#  o#  И$  \&  Ё \&Ъ'  ї'  $(  &(  ╔(  )  D)  |)  ~)  ┤)  Ё ┤)╢)  ╟)  ▐)  ∙)  √)  |*  о*  ░*  `,  №,  Ё №,5-  7-  ┼-  q.  }/  U0  Ы0  е0  ╖0  ╬0  Ё ╬0╨0  1  1  О1  ═1  2  P2  Й2  Л2  &4  Ё &4f4  q4  К4  л4  ┬4  █4   4  5  .5  P5  Ё P5f5  5  Й5  Ъ5  л5  ┐5  ╙5  ▀5  є5  6  Ё 6+6  B6  ^6  x6  У6  п6  ╩6  ╒6  ╫6  k8  Ё k8ф8  я8  9  (9  :9  O9  d9  У9  ╓9  :  Ё :T:  П:  ┐:  Є:  Ї:  <  Ё"*10/06/9110/06/91Е;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄



Похожие:

Pas-pg.dos/Tpw4 iconДокументы
1. /Tb_c_ug.dos/1cont.txt
2. /Tb_c_ug.dos/1intr.txt
Pas-pg.dos/Tpw4 iconДокументы
1. /Td.dos/1Cont.txt
2. /Td.dos/1Glossary.txt
Pas-pg.dos/Tpw4 iconДокументы
1. /Tp6progg.dos/Pg00.txt
2. /Tp6progg.dos/Pg01.txt
Pas-pg.dos/Tpw4 iconДокументы
1. /CИСТЕМА ПРОГРАММИРОВАНИЯ НА МАКРОАССЕМБЛЕРЕ MS-DOS/A1P0.TXT
2. /CИСТЕМА...

Pas-pg.dos/Tpw4 iconДокументы
1. /Tvision.dos/Tv00.txt
2. /Tvision.dos/Tv01.txt
Pas-pg.dos/Tpw4 iconДокументы
1. /Info.txt
2. /Операционная система MS DOS....

Pas-pg.dos/Tpw4 iconДокументы
1. /Et situ'n existais pas/Et situ'n existais pas.pdf
Pas-pg.dos/Tpw4 iconДокументы
1. /Et situ'n existais pas/Et situ'n existais pas.pdf
Pas-pg.dos/Tpw4 iconДокументы
1. /Turbo_c.dos/St00.txt
2. /Turbo_c.dos/St01.txt
Pas-pg.dos/Tpw4 iconДокументы
1. /Tp6userg.dos/Ug00.txt
2. /Tp6userg.dos/Ug01.txt
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©podelise.ru 2000-2014
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы

Разработка сайта — Веб студия Адаманов