Помощь - Поиск - Пользователи - Календарь
Полная версия: Pointers
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
UtaH
Народ, что такое указатели и как с ними работать? Перерыла кучу литры, но там либо нет вообще , либо только правила записи sad.gif
trminator
Указатель я себе представляю как такую веревочку с ярлычком. Эту веревочку можно привязать к какой-то переменной ("взять ее адрес") или просто к какой-то области памяти ("выделить память").
GLuk
А что, интересно, за литру ты рыла, ежели там ничего не было??  :o :o
Стандартный хелпак по паскалю тоже не канает?
P@sh@
Указатель - это обычный 4-хбайтный integer, название pointer введено для того, чтобы программист и сам паскаль понимали, как его использовать (жаль, что нельзя проводить с ним арифметические операции, но это вообщем-то правильно - чтоб не запутывать код и не вызывать Access Violation-ы). Значение переменной типа pointer может быть равно нулю (для этого сделана спец.константа nil) и тогда считается, что указатель никуда не указывает (хотя практически он указывает на ячейку памяти с адресом 0:0). Если же указатель не нулевой - то это абсолютный адрес в памяти. Чтоб получить содержимое памяти по этому адресу, используется оператор ^, но нужно указать, чего и сколько оттуда брать, так как Паскаль сам знать не может, для него это просто память. Поэтому придуманы типизированные указатели (указатели на типы). Например p:^byte - переменная типа указатель на байт. Теперь если написать write(p^) - паскаль будет знать, что по адресу [p] нужно взять один байт. Впрочем, с указателями легко проходит преобразование типов - можно определить тип pint=^integer и написать write(pint(p)^) - и паскаль возьмет 2 байта с этого адреса (в дельфи - 4) и получится ерунда, потому как неизвестно, что там было во втором байте, а если написать такое в дельфи, то получим скорее всего исключение Access Violation, потому как нефиг лезть в чужое адресное пространство.
Это теория, практическое применение интересует ? я могу много написать...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.