Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-70341
Shadowofman
2003-05-08 17:17
2003.05.22
Как повысить точность TTimer?


1-70356
Tolik1
2003-05-09 16:33
2003.05.22
Размеры окон


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


3-70107
Евгений
2003-04-28 09:46
2003.05.22
dbExpress


1-70391
Seldon
2003-05-09 18:29
2003.05.22
Подсветка синтаксиса в RichEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский