Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
2-1138719643
Trilon1
2006-01-31 18:00
2006.02.19
Сортировка DBGrid


15-1138717831
stone
2006-01-31 17:30
2006.02.19
С Днём рождения! 31 января


1-1137572125
Ega23
2006-01-18 11:15
2006.02.19
Раскрашивание DBGridEh


1-1137568396
DmitriyR
2006-01-18 10:13
2006.02.19
выбор панели


6-1131743288
Delphi_is_cool
2005-11-12 00:08
2006.02.19
Состояние сокета




   Наверх