Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что такое ^P?


AlexKniga ©   (2006-08-14 12:23:00) 

var P: Pointer;
P^ то куда указывает P.
А что такое ^P ?


Anatoly Podgoretsky   (2006-08-14 16:34:00) [1]

Тип типизированый указатель, используется только для указания типа в объявление типа.
Это документировано начиная с 1971 года.


AlexKniga   (2006-08-14 16:10:00) [2]

Вот к чему приводят однобуквенные имена:
var
 P: ^Integer;
 B: Integer;
begin
 GetMem(P, 4);
 P^ := 123;
 B := Integer(^P);    // B = 16
{... с помощью конструкции вида ^C, где C - код соответствущего управ-
ляющего  символа, при этом  значение  C должно быть на 64 больше
кода управляющего символа.}

 B := Integer(P^);    // B = 123
 FreeMem(P);
end;


Zeqfreed   (2006-08-14 15:30:00) [3]

> [47] MBo ©   (14.08.06 14:38)

Спасибо :) А то я всю документацию к Delphi перерыл, так и не нашёл.


MBo   (2006-08-14 14:38:00) [4]

>Кто знает где данная фича описана в документации (или других, возможно не официальных, источнииках),

Это поддерживаемое для совместимости наследие старинного Паскаля (уже в руководстве по языку TP7 такой способ задания символьных констант не упоминался)

http://www.codenet.ru/progr/other/lpas1.php


Zeqfreed   (2006-08-14 14:10:00) [5]

Вот вполне компилирующийся код :)

var
 s : String;
begin
 s := ^P;


P.S. Кто знает где данная фича описана в документации (или других, возможно не официальных, источнииках), пожалуйста, поделитесь информацией. А то никак не могу найти.


Сергей М.   (2006-08-14 13:57:00) [6]


> Было примерно так


Скорее всего было так

FillChar(Pointer(pMemMap ^), 1024, #0);

А поскольку Pointer здесь лишний, то можно еще короче

FillChar(pMemMap ^, 1024, #0);


AlexKniga   (2006-08-14 13:51:00) [7]

Elen
Компилировалась в выполнении кода.

Счас
var pMemMap: Pointer;
...
FillChar(pMemMap^, 1024, #0);

Было примерно так:
var pMemMap: Типа специализированный указатель;
...
FillChar(Pointer(^pMemMap), 1024, #0);


Elen   (2006-08-14 13:16:00) [8]

Ну закрыта так закрыта


Elen   (2006-08-14 13:15:00) [9]


> Ситуация когда ^P компилировалась

Компилировалась в выполнении кода или при обьявлениях переменных или типов? код приведи сегодняшний


AlexKniga   (2006-08-14 13:15:00) [10]

Тема закрыта.


AlexKniga   (2006-08-14 13:14:00) [11]

Попробовал несколько вариантов, НЕ получается скомпилировать это ^P. Ситуация когда ^P компилировалась, была в пятницу. После выходных уже не вспомнить. ^P компилировалось скорее всего из-за явного преобразования типов. Повторяю: счас мне не удалось это повторить.


AlexKniga   (2006-08-14 13:00:00) [12]

Elen, Lamer@fools.ua
Код уже затер. Возпроизвести момент когда это ^P компилировалось не смог (много воды утекло). Но Watch list этот ^P съедает.


MBo   (2006-08-14 13:00:00) [13]

>А что такое ^P ?
>Недопустимая конструкция

Ну почему же недопустимая ;)
^P - Это один из способов ввода символа #16 (DLE) (подобно ^C = Ctrl-C = #3 = ETX)


Lamer@fools.ua   (2006-08-14 12:51:00) [14]

> А что такое ^P ?

Недопустимая конструкция. "Крышка" (^) указывается либо перед типом (указатель на тип), либо после переменной (разыменование).


Сергей М.   (2006-08-14 12:29:00) [15]


> что такое ^P ?


Указатель на указатель.


Ega23   (2006-08-14 12:28:00) [16]

P^ - значение, которое лежит по тому адресу, на который указывает P.


Elen   (2006-08-14 12:28:00) [17]

You can declare a pointer to any type, using the syntax

type pointerTypeName = ^type

Кажись такая запись используется только в обьявлениях переменных
А что за код?


AlexKniga   (2006-08-14 12:24:00) [18]

Компилятор съедает это ^P, но прога дает AV.


Наверх

Титульная страница Поиск, карта сайта Написать письмо