Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.12.08;
Скачать: CL | DM;

Вниз

Адресс элемента динамического массива   Найти похожие ветки 

 
HEND   (2013-02-24 17:45) [0]

Подскажите как получить адрес элемента динамического массива, так чтоб к нему можно было обращаться через другой указатель..


 
Адресант   (2013-02-24 17:59) [1]

Pointer(Integer(массив) + индекс_элемента * SizeOf(тип_элементов))

Массив объявить с директивой Packed.


 
HEND   (2013-02-24 18:17) [2]

сделал так
...
p:pointer;
arrayint: array of integer;
index:integer;
//
somevar:integer;
....
Выделили память для массива
....
pointer:=@(arrayint[index]);
somevar:=(integer(pointer^)); // somevar = arrayint[index]
....


 
Dimka Maslov ©   (2013-02-24 19:21) [3]

P: PInteger;
arrayint: array ogf integer;

SetLength(arrayint, 128);
P := @arrayint[Index];
somevar := P^;


 
HEND   (2013-02-24 19:24) [4]

Все верно, просто в моем случае нужно назначить нетипизированному указателю переменной класса.


 
Германн ©   (2013-02-25 02:00) [5]


> Массив объявить с директивой Packed

Нафига?


 
icWasya ©   (2013-02-25 10:32) [6]

Но не забудьте, что после SetLength, все адреса могут поменяться.


 
Юрий Зотов ©   (2013-02-25 13:25) [7]


> Германн ©   (25.02.13 02:00) [5]


type
 TByteArray = array of byte;

Допустим, включено выравнивание на 4 байта, тогда смещение i-го элемента от начала массива будет i*4, а формула [1] даст i.

А с директивой packed все всегда будет нормально. Правда, тут как-то обсуждалось, что компилятор пакует массивы даже и без явного указания packed - но стоит ли на это рассчитывать? Ведь в новой версии оно может и измениться.


 
Германн ©   (2013-02-26 02:49) [8]


> Правда, тут как-то обсуждалось, что компилятор пакует массивы
> даже и без явного указания packed - но стоит ли на это рассчитывать?
>  Ведь в новой версии оно может и измениться.

Хм.
Сомневаюсь я однако в такой возможности. Ибо ещё в ТП было сказано:
http://pikucha.ru/ianE3


 
Германн ©   (2013-02-26 13:10) [9]

Кстати.
Префикс packed допустимо использовать и при объявлении типа множество.
Так может на всякий случай нужно всегда писать:
TMySet = packed set of 1..8;
?
)))


 
Юрий Зотов ©   (2013-02-26 15:01) [10]

> Германн ©   (26.02.13 02:49) [8]
> ещё в ТП было сказано

В ТП много чего было сказано. Например, что размер массива не может превышать 64К. Или что integer имеет разрядность 16 бит.

Но жизнь не стоит на месте. И никто не знает, что будет завтра.


 
Германн ©   (2013-02-27 00:35) [11]


> Юрий Зотов ©   (26.02.13 15:01) [10]
>
> Но жизнь не стоит на месте. И никто не знает, что будет
> завтра.
>

Ну а что насчёт packed set of?


 
Юрий Зотов ©   (2013-02-27 00:51) [12]


> Германн ©   (27.02.13 00:35) [11]

Понятия не имею.


 
Германн ©   (2013-02-27 01:25) [13]


> Понятия не имею.
>

Тогда выскажу своё мнение по этому поводу основываясь на выдержке из топика справки Д6 выданному по запросу в "Предметном указателе" packed (reserved word)

Instances of a structured type hold more than one value. Structured types include sets, arrays, records, and files as well as class, class-reference, and interface types. Except for sets, which hold ordinal values only, structured types can contain other structured types; a type can have unlimited levels of structuring.
By default, the values in a structured type are aligned on word or double-word boundaries for faster access. When you declare a structured type, you can include the reserved word packed to implement compressed data storage. For example,

type TNumbers = packed array[1..100] of Real;

Using packed slows data access and, in the case of a character array, affects type compatibility.

Как видно из этой выдержки префикс packed исторически был задуман как применимый ко всем structured types. Реализован он был в своё (причём очень давнее) время только к записям. Его применение ко всем прочим до сих пор не реализовано. И, имхо, вряд ли будет когда-нибудь реализовано, ибо тому сейчас нет настоятельной необходимости. А абсурд в отношении множеств вообще не имеет смысла.


 
Германн ©   (2013-02-27 01:35) [14]

Т.е. я хотел в данных своих высказываниях выразить мысль, что не стоит дуть на воду, тем более если ни на чём предварительно не обжёгся.



Страницы: 1 вся ветка

Текущий архив: 2013.12.08;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.007 c
15-1371457959
Sergey Masloff
2013-06-17 12:32
2013.12.08
И опять про ЕГЭ


1-1319485472
vuk
2011-10-24 23:44
2013.12.08
class property и виртуальные методы


8-1233672337
salamander
2009-02-03 17:45
2013.12.08
Как сделать повтор звука в компоненте MediaPlayer?


2-1361480816
ttt
2013-02-22 01:06
2013.12.08
Удаление спец. символов


15-1371546824
брат Птибурдукова
2013-06-18 13:13
2013.12.08
ХЕ4