Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.23;
Скачать: CL | DM;

Вниз

Указатели   Найти похожие ветки 

 
утк   (2006-07-03 15:46) [0]

Всем привет! Сколько пытаюсь понять ответ на свой вопрос, не как не могу найти хорошего, доступного ответа на мой вопрос. А вопрос заключается вот в чем: что такое указатель, а главное для чего он нужен? Особенно нужны легкие примеры, например для чего нужно использовать указатели, в каких случаях их нужно использовать а в каких нет. Просто определение этого термина я не раз читал, но вот именно с примерами и задачами указателей, понять не могу.


 
Ega23 ©   (2006-07-03 15:48) [1]

Указатель - это адрес ячейки памяти, в которой(ых) лежит(ат)  твои данные.


 
утк   (2006-07-03 15:50) [2]

Я это понимаю, но зачем нужно прибегать к ним? т.е вот допустим я делаю
var
s:string;
begin
s := "sss";

т.е. в нашем случае компилятор сам определяет адрес в памяти для переменной? а зачем вообще необходимо прибегать к указателям? т.е. и в моем случае со string можно было бы впихнуть указатель, но зачем? по какому принципу их применяют?


 
Reindeer Moss Eater ©   (2006-07-03 15:53) [3]

но зачем?

А если переменной никакой нет, но к данным получить доступ все равно надо?


 
утк   (2006-07-03 15:59) [4]

Я не понимаю, я наверное дико глуп, поэтому и прошу подкрепить примерами.


 
Reindeer Moss Eater ©   (2006-07-03 16:01) [5]

пример из [3] чем не пример?


 
tesseract ©   (2006-07-03 16:05) [6]


>  т.е. и в моем случае со string можно было бы впихнуть указатель,
>  но зачем? по какому принципу их применяют?


например для передачи значений в функции.


 
Desdechado ©   (2006-07-03 16:15) [7]

Есть много стандартных функций, которые требуют не стринг, а PChar. А это и есть указатель.
Функции API тоже часто возвращают указатели, которые могут понадобиться, чтобы потом использовать возвращаемый результат (в т.ч. при вызове других функций).


 
MBo ©   (2006-07-03 16:31) [8]

Несколько областей применения указателей (некоторые примеры надуманные):

1. изменяемые параметры процедур/функция
procedure IncIt(var i: integer);
begin
 i:= i + 1;
end;

2. Динамическое выделение памяти, создание динамических структур, списков, деревьев, дельфийских объектов
type
 PRec = ^Rec
 TRec = record
   Data: Integer;
   Next: PRec;
 end;
var PR: PRec;
  New(PR);
  PR^.Data := 1;
  Pr.Next := nil;
. ..
 Dispose(Pr)
------------------
StrList := TStringList.Create;
 
3. Приведение/преобразование типов
  IntVar := PInteger(@ByteArr)^;

 procedure TreatBuf(var Buf);
 begin
   PByteArray(@Buf)[0] :=5;

4.  Доступ к нужному участку памяти, или элементу массива
  PW: PWord;
  PW := @WordArr[0];
 for i := 0 to 9 do begin
   PW^ := 0;
   Inc(PW);//в отличие от WordArr[i] не требуется вычисление адреса, использующее умножение
 end;

и т.д., и т.п.


 
Apollon_604   (2006-07-03 17:36) [9]

Например, все переменные классового типа - указатели на объект.


type
 TMyType = class
 public
   constructor Create; override;
   destructor Destroy; override;
 end;

....

procedure MyProc;
var
 MyVar1, MyVar2: TMyType;
begin
 MyVar1 := TMyType.Create; // Create - выделение памяти и распределение в ней объекта
 MyVar2 := MyVar1; // Обе переменные указывают на один и тот же объект
end;


 
evvcom ©   (2006-07-03 17:52) [10]

> [2] утк   (03.07.06 15:50)

По сути твой string - тоже указатель, просто язык построен так, что ты этого не видишь. Ты можешь своей s присвоить и "sss" и "sssssssssssssssssssssssssssssss". В первом случае 3 байта, во втором несколько десятков, а в третьем может оказаться и Гиг. Как такое хранить?
В этом случае твоя переменная всего 4 байта и указывает на область памяти, где лежит переменное количество байт. Например, в стринге этот указатель тычет непосредственно на данные, а на 4 байта раньше лежит длина твоего стринга. Это паскалевский тип данных. В Си же принято указывать на данные, которые завершаются нулевым байтом. В Дельфи такой тип это PChar.
Это коротко. А подробнее - читай литературу, разбирайся с Delphi. Копайся в памяти, для этого не помешало бы и ассемблер зацепить :)



Страницы: 1 вся ветка

Текущий архив: 2006.07.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
15-1150711268
Fireboy
2006-06-19 14:01
2006.07.23
Много вопросов на которые нужны ответы


1-1149682763
mmms
2006-06-07 16:19
2006.07.23
Как послать сообщение элементу, будто над ним находится мышь?


15-1150696372
ANB
2006-06-19 09:52
2006.07.23
Посоветуйте библиотеку для работы с почтой


2-1152015126
Ищущий.
2006-07-04 16:12
2006.07.23
изменение положения минимизированных окон


15-1150889662
parovoZZ
2006-06-21 15:34
2006.07.23
Программно ограничить доступ к каталогу/файлу.