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

Вниз

Указатель на массив.   Найти похожие ветки 

 
Kolan ©   (2006-02-02 23:04) [0]

Здравствуйте,
 Простой вопрос:
var
 P: Pointer;
 Arr: array of Byte;
begin
 SetLEngth(Arr, 10);
 P := Arr;
end;


Впрос - как добраться до элементов массива имея P?


 
Loginov Dmitry ©   (2006-02-02 23:09) [1]

Byte(Pointer(P + ElemIdx - 1)^) := Value;


 
Loginov Dmitry ©   (2006-02-02 23:14) [2]

Поправочка :)

Byte(Pointer(Integer(P) + ElemIdx - 1)^) := Value;
(-1 - если первый индекс единица. Можно и без нее)


 
Eraser ©   (2006-02-02 23:17) [3]

val := Byte(Pointer(integer(P) + ElemIdx)^);


 
Eraser ©   (2006-02-02 23:17) [4]


> Loginov Dmitry ©   (02.02.06 23:14) [2]

эх... зря исправлял :)


 
Kolan ©   (2006-02-02 23:31) [5]

Loginov Dmitry ©   (02.02.06 23:14) [2]
Eraser ©   (02.02.06 23:17) [3]


val := Byte(Pointer(integer(P) + ElemIdx)^);

А обяснить можно? :)

Типа: integer(P) преобразуем указательв число длятого чтобы...

Благодарю за помошь....


 
Eraser ©   (2006-02-02 23:36) [6]


> Kolan ©   (02.02.06 23:31) [5]


> nteger(P) преобразуем указательв число длятого чтобы...

к этому числу можно было прибавить смещение, по которому находится нужный элимент. Т.к. длина типа байт равна одному байту, то просто прибавляем индекс элимента к указателю на массив и всё.


 
Almaz ©   (2006-02-03 00:38) [7]


> Впрос - как добраться до элементов массива имея P?

Как альтернатива предложенному варианту, особенно, если не задумываться о размере элемента массива, можно сделать так:

type
 TDynByteArray = array of byte;
...
var
 Arr: TDynByteArray;
 P: Pointer;
begin
 SetLength(Arr, 10);
 P := Arr;
 ...
 TDynByteArray(P)[5] := Value;
  ...
end.


Удачи.


 
begin...end ©   (2006-02-03 08:14) [8]

PByte(PAnsiChar(Arr) + ElemIdx)^


 
Pointer   (2006-02-04 01:01) [9]

procedure TForm1.Button1Click(Sender: TObject);
VAR P: Pointer;   Arr: array[0..10] of Byte;
I:word;
begin
 FOR I:=0 TO 10 DO Arr[i]:=i;
 P := @Arr[0];
 FOR I:=0 TO 10 DO
 BEGIN
   Caption:=Caption+" "+inttostr(PByte(P)^);
   INC(PByte(P));
 END;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.025 c
2-1138526331
начинающий5
2006-01-29 12:18
2006.02.19
RXLib


15-1138686642
syte_ser78
2006-01-31 08:50
2006.02.19
защита картинки от распечатывания


15-1138453656
PARUS
2006-01-28 16:07
2006.02.19
Компоненты Delphi (2005).


2-1138555979
з. танька
2006-01-29 20:32
2006.02.19
Учет траффика


6-1131793200
Илья Бобров
2005-11-12 14:00
2006.02.19
Indy FTP