ВУЗ:
Составители:
Рубрика:
При использование операции @ для формального параметра-значения будет построен указатель,
указывающий на ячейку стека, в которой содержится фактическое значение параметра. Предположим, что
Foo является формальным параметром-значением процедуры, а FooPtr является переменной указателем.
Если в процедуре выполняется операция
FooPtr := @Foo;
то FooPtr^ будет ссылкой на значение Foo. Однако, FooPtr^ не указывает на сам параметр Foo, поскольку
он указывает
на значение Foo, которое было взято из Foo и сохранено в стеке.
Применение оператора @ к параметру-переменной приведет к тому, что будет сформирован ука-
затель на фактический параметр (указатель берется из стека). Предположим, что One - параметр-
переменная процедуры, Two - переменная, передаваемая в процедуру в качестве фактического параметра
переменной One, а OnePtr является указателем на переменную. Если
в процедуре выполняется оператор:
OnePtr := @One;
то OnePtr является указателем на переменную Two, а OnePtr^ ссылка на саму переменную Two.
Оператор @ можно применять к процедуре или функции. При этом будет получен указатель на
ее точку входа. В Turbo Pascal не предусмотрен механизм для использования такого указателя. Единст-
венным применением указателя процедуры может быть передача его программе на языке
ассемблер или
использование в inline операторе.
Наконец, оператор @ можно применить к уточненному идентификатору метода, чтобы создать
указатель на точку входа метода.
4. Бестиповые указатели
Turbo Pascal содержит особый стандартный ссылочный тип, который позволяет не конкретизиро-
вать свой базовый тип, то есть тип указуемых значений. Этот тип имеет идентификатор Pointer и совмес-
тим со всеми
ссылочными типами. Например, описания
var
a : ^integer;
b : ^char;
c : pointer;
допускают присваивания вида
c := a;
c := b;
(присваивание a := b незаконно). Значения типа pointer называют нетипизированными указателями. Работа
с ними подразумевает обычно их преобразование в типизированные указатели, ссылающиеся на значения
определенного типа.
Тип Pointer хранится как двойное слово с частью смещения в младшем слове и с сегментной ча-
стью в старшем слове. Значение
указателя nil хранится как 0 в обоих словах.
Turbo Pascal содержит (дополнительно к New и Dispose) две процедуры GetMem и FreeMem рас-
пределения памяти, которые выделяют и освобождают области кучи без учета типа тех значений, которые
будут в них размещаться.
5. Приведение типов переменных
Ссылка на переменную одного типа может быть преобразована в ссылку на переменную другого
типа
с помощью приведения типов переменных.
приведение идентификатор типа ( ссылка на переменную )
типов
При использование операции @ для формального параметра-значения будет построен указатель, указывающий на ячейку стека, в которой содержится фактическое значение параметра. Предположим, что Foo является формальным параметром-значением процедуры, а FooPtr является переменной указателем. Если в процедуре выполняется операция FooPtr := @Foo; то FooPtr^ будет ссылкой на значение Foo. Однако, FooPtr^ не указывает на сам параметр Foo, поскольку он указывает на значение Foo, которое было взято из Foo и сохранено в стеке. Применение оператора @ к параметру-переменной приведет к тому, что будет сформирован ука- затель на фактический параметр (указатель берется из стека). Предположим, что One - параметр- переменная процедуры, Two - переменная, передаваемая в процедуру в качестве фактического параметра переменной One, а OnePtr является указателем на переменную. Если в процедуре выполняется оператор: OnePtr := @One; то OnePtr является указателем на переменную Two, а OnePtr^ ссылка на саму переменную Two. Оператор @ можно применять к процедуре или функции. При этом будет получен указатель на ее точку входа. В Turbo Pascal не предусмотрен механизм для использования такого указателя. Единст- венным применением указателя процедуры может быть передача его программе на языке ассемблер или использование в inline операторе. Наконец, оператор @ можно применить к уточненному идентификатору метода, чтобы создать указатель на точку входа метода. 4. Бестиповые указатели Turbo Pascal содержит особый стандартный ссылочный тип, который позволяет не конкретизиро- вать свой базовый тип, то есть тип указуемых значений. Этот тип имеет идентификатор Pointer и совмес- тим со всеми ссылочными типами. Например, описания var a : ^integer; b : ^char; c : pointer; допускают присваивания вида c := a; c := b; (присваивание a := b незаконно). Значения типа pointer называют нетипизированными указателями. Работа с ними подразумевает обычно их преобразование в типизированные указатели, ссылающиеся на значения определенного типа. Тип Pointer хранится как двойное слово с частью смещения в младшем слове и с сегментной ча- стью в старшем слове. Значение указателя nil хранится как 0 в обоих словах. Turbo Pascal содержит (дополнительно к New и Dispose) две процедуры GetMem и FreeMem рас- пределения памяти, которые выделяют и освобождают области кучи без учета типа тех значений, которые будут в них размещаться. 5. Приведение типов переменных Ссылка на переменную одного типа может быть преобразована в ссылку на переменную другого типа с помощью приведения типов переменных. приведение идентификатор типа ( ссылка на переменную ) типов
Страницы
- « первая
- ‹ предыдущая
- …
- 4
- 5
- 6
- 7
- 8
- …
- следующая ›
- последняя »