Форум: "Основная";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];
ВнизОб указателях Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c