Другие языки программирования и технологии
Несколько вопросов по Делфи. что такое указатели и зачем они нужны, зачем нужна @ ,и что за тип Pointer.
что такое указатели и зачем они нужны, зачем нужна @ ,и что за тип Pointer.
Все значения переменных хранятся в памяти компьютера и имеют свой адрес в этой памяти и размер. Например, если объявить переменную x типа Integer, программа выделит ей кусок памяти размером в 4 байта, и этот кусок памяти будет иметь какой-то адрес (какой именно - программа сама решает) . В простых ситуациях тебе не надо думать о том, по какому адресу хранится переменная и какой она имеет размер. Но бывают случаи когда это нужно. Для таких случаев предусмотрен оператор @ - он позволяет получить адрес переменной в памяти. Pointer - это специальный тип, который позволяет хранить адреса.
Например, эта программа напечатает на экране адрес, по которому хранится в памяти значение переменной x.
var x: integer;
p: pointer;
begin
x := 1;
p := @x;
writeln(longint(p));
end.
Указатели нужны для тех случаев, когда приходится работать с памятью напрямую. Например, если тебе нужно выделить кусок памяти размером 100 байт и записать туда кучу разнотипных данных, а потом читать их оттуда.
Забыл сказать, что указатель - это как раз переменная типа Pointer. Правильное название такого указателя - нетипизированный, он позволяет хранить адрес любого участка памяти, любого размера, и ему неважно что за данные там хранятся. Есть еще другие указатели - типизированные, они могут ссылаться только на адреса переменных какого-то одного типа. Вот так объявляется типизированный указатель:
var p: ^Integer;
Данный указатель p может хранить только адреса переменных типа Integer и никаких других. Такой указатель не может ссылаться на произвольный участок памяти произвольной длины. А вот указатель типа Pointer - может.
Например, эта программа напечатает на экране адрес, по которому хранится в памяти значение переменной x.
var x: integer;
p: pointer;
begin
x := 1;
p := @x;
writeln(longint(p));
end.
Указатели нужны для тех случаев, когда приходится работать с памятью напрямую. Например, если тебе нужно выделить кусок памяти размером 100 байт и записать туда кучу разнотипных данных, а потом читать их оттуда.
Забыл сказать, что указатель - это как раз переменная типа Pointer. Правильное название такого указателя - нетипизированный, он позволяет хранить адрес любого участка памяти, любого размера, и ему неважно что за данные там хранятся. Есть еще другие указатели - типизированные, они могут ссылаться только на адреса переменных какого-то одного типа. Вот так объявляется типизированный указатель:
var p: ^Integer;
Данный указатель p может хранить только адреса переменных типа Integer и никаких других. Такой указатель не может ссылаться на произвольный участок памяти произвольной длины. А вот указатель типа Pointer - может.
Книжку почитать религия не позволяет ?
загуглись, бездельник
Похожие вопросы
- Вопрос по делфи
- Несколько вопросов про преобразование типов в С++ и возможно не только.
- Несколько вопросов по Паскалю =)
- Несколько вопросов по Delphi
- я создаю программу (несколько вопросов от чайника!): D
- Доброго времени суток друзья. У меня возникло несколько вопросов о программировании..
- Несколько вопросов программистам по поводу устройства на работу. Вспомните, как вы впервые устраивались...
- Люди может быть это и глупый вопрос, но что такое BIOS и для чего он нужен?
- вопрос по С++. объясните что такое пространство имен? зачем нужны.. как юзаются... и тд.. а то я вообще не врубаю))
- Несколько вопросов о сайтах, рекламодателях и где деньги лежат . Помогите разобраться