Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.041 c
3-1135339546
вп
2005-12-23 15:05
2006.02.19
IBExpert и Foreign key


15-1138292129
XsID
2006-01-26 19:15
2006.02.19
386 и 64Тб виртуальной памяти


4-1133858969
volod
2005-12-06 11:49
2006.02.19
Запуск bat файла


2-1139062291
hunn
2006-02-04 17:11
2006.02.19
цвет точки


2-1138943572
hunn
2006-02-03 08:12
2006.02.19
заголовок stringgrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский