Pointers |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Pointers |
UtaH |
Сообщение
#1
|
человек-нерпа Группа: Пользователи Сообщений: 286 Пол: Женский Репутация: 13 |
Народ, что такое указатели и как с ними работать? Перерыла кучу литры, но там либо нет вообще , либо только правила записи
-------------------- I am riding a Thesaurus!
|
trminator |
Сообщение
#2
|
Четыре квадратика Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: 4 |
Указатель я себе представляю как такую веревочку с ярлычком. Эту веревочку можно привязать к какой-то переменной ("взять ее адрес") или просто к какой-то области памяти ("выделить память").
-------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
GLuk |
Сообщение
#3
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
А что, интересно, за литру ты рыла, ежели там ничего не было?? :o :o
Стандартный хелпак по паскалю тоже не канает? |
P@sh@ |
Сообщение
#4
|
Бывалый Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: 2 |
Указатель - это обычный 4-хбайтный integer, название pointer введено для того, чтобы программист и сам паскаль понимали, как его использовать (жаль, что нельзя проводить с ним арифметические операции, но это вообщем-то правильно - чтоб не запутывать код и не вызывать Access Violation-ы). Значение переменной типа pointer может быть равно нулю (для этого сделана спец.константа nil) и тогда считается, что указатель никуда не указывает (хотя практически он указывает на ячейку памяти с адресом 0:0). Если же указатель не нулевой - то это абсолютный адрес в памяти. Чтоб получить содержимое памяти по этому адресу, используется оператор ^, но нужно указать, чего и сколько оттуда брать, так как Паскаль сам знать не может, для него это просто память. Поэтому придуманы типизированные указатели (указатели на типы). Например p:^byte - переменная типа указатель на байт. Теперь если написать write(p^) - паскаль будет знать, что по адресу [p] нужно взять один байт. Впрочем, с указателями легко проходит преобразование типов - можно определить тип pint=^integer и написать write(pint(p)^) - и паскаль возьмет 2 байта с этого адреса (в дельфи - 4) и получится ерунда, потому как неизвестно, что там было во втором байте, а если написать такое в дельфи, то получим скорее всего исключение Access Violation, потому как нефиг лезть в чужое адресное пространство.
Это теория, практическое применение интересует ? я могу много написать... |
Текстовая версия | 23.12.2024 20:54 |