Главная страница
    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.46 MB
Время: 0.038 c
4-1133252484
*Pavel
2005-11-29 11:21
2006.02.19
Развернуть чужое окно


3-1134985269
Denin
2005-12-19 12:41
2006.02.19
Добавление списка полей в TClientDataSet designtime


2-1138370764
Glex
2006-01-27 17:06
2006.02.19
Помогите решить задачу. Проблема чисто техническая.


1-1138016100
Gremlin13
2006-01-23 14:35
2006.02.19
Эмуляция щелчка мыши


2-1138804252
Dot
2006-02-01 17:30
2006.02.19
чтение строки из текстового файла





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский