Форум: "Начинающим";
Текущий архив: 2013.12.08;
Скачать: [xml.tar.bz2];
ВнизАдресс элемента динамического массива Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c