Главная страница
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.015 c
14-70507
Студент
2003-05-04 20:09
2003.05.22
Где скачать Borland C или Turbo C


8-70399
yuravss
2003-02-09 16:12
2003.05.22
Как снимать скриншоты десктопа без тормозов (GDI)


1-70283
Deus
2003-05-11 16:55
2003.05.22
Ошибка Internal Error: L594.


14-70451
tytus
2003-05-01 19:26
2003.05.22
Моя кнопка


1-70246
Novichek
2003-05-11 14:54
2003.05.22
из двоичной в десятичную