![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Указатель на массив. [D7, XP]
Kolan © (2006-02-02 23:04:00)Здравствуйте,
Простой вопрос:
var
P: Pointer;
Arr: array of Byte;
begin
SetLEngth(Arr, 10);
P := Arr;
end;
Впрос - как добраться до элементов массива имеяP?
Pointer (2006-02-04 01:01:00) [1]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;
begin...end (2006-02-03 08:14:00) [2]PByte(PAnsiChar(Arr) + ElemIdx)^
Almaz (2006-02-03 00:38:00) [3]
> Впрос - как добраться до элементов массива имея P?
Как альтернатива предложенному варианту, особенно, если не задумываться о размере элемента массива, можно сделать так:
type
TDynByteArray = array of byte;
...
var
Arr: TDynByteArray;
P: Pointer;
begin
SetLength(Arr, 10);
P := Arr;
...
TDynByteArray(P)[5] := Value;
...
end.
Удачи.
Eraser (2006-02-02 23:36:00) [4]
> Kolan © (02.02.06 23:31) [5]
> nteger(P) преобразуем указательв число длятого чтобы...
к этому числу можно было прибавить смещение, по которому находится нужный элимент. Т.к. длина типа байт равна одному байту, то просто прибавляем индекс элимента к указателю на массив и всё.
Kolan (2006-02-02 23:31:00) [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:17:00) [6]val := Byte(Pointer(integer(P) + ElemIdx)^);
Eraser (2006-02-02 23:17:00) [7]
> Loginov Dmitry © (02.02.06 23:14) [2]
эх... зря исправлял :)
Loginov Dmitry (2006-02-02 23:14:00) [8]Поправочка :)
Byte(Pointer(Integer(P) + ElemIdx - 1)^) := Value;
(-1 - если первый индекс единица. Можно и без нее)
Loginov Dmitry (2006-02-02 23:09:00) [9]Byte(Pointer(P + ElemIdx - 1)^) := Value;