Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1371318845
Пит
2013-06-15 21:54
2013.12.08
Управление пользователями Firebird


15-1371457959
Sergey Masloff
2013-06-17 12:32
2013.12.08
И опять про ЕГЭ


2-1361414339
ixen
2013-02-21 06:38
2013.12.08
dataset не фильтрует время


15-1370957500
EuSet
2013-06-11 17:31
2013.12.08
указание Out параметра зануляет переменную?


2-1361713536
HEND
2013-02-24 17:45
2013.12.08
Адресс элемента динамического массива





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