Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.22;
Скачать: CL | DM;

Вниз

Об указателях   Найти похожие ветки 

 
Valeris   (2003-05-12 16:41) [0]

Есть следующая запись:

type
Psomething = record
..
end
Psomething = ^something;
PPsomething=^Psomething;

var
pp:PPsomething;

Для работы с переменной pp нужно ли заботиться о выделении памяти функциями New, AllocMem и т.д. или не нужно?

Спасибо.


 
VaS ©   (2003-05-12 16:47) [1]

Зачем же? Переменная pp находится в стеке. Все ок.


 
Valeris   (2003-05-12 16:50) [2]

Спасибо VaS ©


 
Digitman ©   (2003-05-12 16:53) [3]


> Для работы с переменной pp нужно ли заботиться о выделении
> памяти функциями New, AllocMem и т.д. или не нужно?


если переменная данного типа - статическая или локальна в процедуре/ф-ции, то - нет, выделять ее не нужно, об этом позаботился компилятор

Но ! о содержимом этой переменной компилятор не заботится (для статической - по-умолчанию nil, для локальной - "мусор")

Cодержимое же этой переменной д.б. адрес переменной указательного типа. Cодержимое которой, в свою очередь, подчиняется тем же правилам.

Адрес переменной можно указать либо явно (@) либо возложить эту задачу на менеджер памяти, вызвав New() или GetMem()


 
VaS ©   (2003-05-12 16:54) [4]

Вообще-то это была шутка. Под сам указатель на указатель конечно выделять ничего не надо :) А вот под то, на что он будет указывать- надо. Покажи код, как ты используешь эти типы.


 
Digitman ©   (2003-05-12 16:54) [5]


> VaS © (12.05.03 16:47)
> Зачем же? Переменная pp находится в стеке. Все ок.


не факт.

из чего это следует, по-твоему ?


 
VaS ©   (2003-05-12 17:02) [6]

Digitman:
var
pp: PPsomething;
Если переменная локальная - в стеке. Глобальная - в сегменте данных.
Я хотел подчеркнуть неточность начального вопроса.


 
Valeris   (2003-05-12 17:37) [7]

Я изучаю функции Windows Terminal Server Api (wtsapi32.dll, так вот там есть функция WTSEnumerateSessions(.., pp, ..). Вообщем эта функция возвращает в переменную pp указатель на некую переменную, которая в свою очередь является указателем на некий массив(array of something).



 
default ©   (2003-05-12 19:48) [8]

Valeris (12.05.03 17:37)
и в чём проблема?
не можешь получить доступ к этому массиву?


 
default ©   (2003-05-12 20:18) [9]

procedure TForm1.Button1Click(Sender: TObject);
var
Str: PChar;
P: Pointer;
begin

Str := "12345"; // это массив кодов символов - то есть строка
// в переменной Str хранится адрес первого символа строки
P := @Str; // копируем адрес переменной Str в P
// вот что-то навроде этого указателя ты получишь в своём случае
// теперь по этому указателю считаем третий элемент массива Str -
// то есть символ "3" и выведем его в заголовок формы
Caption := PChar(Cardinal(P^) + 2)^
// вот и всё

end;



Страницы: 1 вся ветка

Текущий архив: 2003.05.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
1-70212
Nikos
2003-05-11 11:42
2003.05.22
Приведите пример отслеживания событий в динамически созданных объ


14-70441
thing
2003-05-01 20:26
2003.05.22
Графика


3-70138
jen_bond
2003-04-30 17:27
2003.05.22
Перевод из нижнего регистра в верхний.


3-70151
Igor Mish
2003-05-01 20:44
2003.05.22
Что такое CalcOp1 в Rave ?


3-70177
jonymoto
2003-05-02 11:02
2003.05.22
Как запретить ввод руских букв в таблицу