Главная страница
    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.038 c
15-1138446098
Хинт
2006-01-28 14:01
2006.02.19
Перевести с Visa илл Master card на WebMoney


6-1131551799
Леонид Федьков
2005-11-09 18:56
2006.02.19
Копирование файлов с сайта


15-1138315032
Стыдно
2006-01-27 01:37
2006.02.19
г/л в мл/м.куб


2-1138116838
Rust007
2006-01-24 18:33
2006.02.19
Альтернатива WebBrowser-a


15-1138472057
tesseract
2006-01-28 21:14
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский