Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];

Вниз

динамический массив   Найти похожие ветки 

 
Artog   (2003-12-02 15:17) [0]

Доброго времени суток, мастера.
Пример кода:
var
BufSpeed : array of byte;
i : integer;
begin
..............
..............
SetLength(BufSpeed, 100);
i := sizeof(BufSpeed); //возвращает 4
i := sizeof(pointer(BufSpeed)^); //возвращает 0
..............
..............

Как для данного массива получить его размер?
Спасибо.


 
DVM   (2003-12-02 15:18) [1]

Length


 
closer   (2003-12-02 15:18) [2]

High - верхняя граница массива
Low - нижняя граница массива


 
Artog   (2003-12-02 15:26) [3]

Данные функции возврвщают количество элементов массива.
Конечно, можно пересчитать в байты, но хотелось бы сразу в байтах.


 
Тимохов   (2003-12-02 15:28) [4]

А на фига это тебе может быть нужно?
Если ты хочешь напрямую работать с памятью динамического массива, то надо очень хоршо знать как они устроены. Судя по вопросам у тебя не очень большой опыт в использовании дин. массивов..


 
Amoeba   (2003-12-02 15:30) [5]

Хотеть, конечно не вредно, но сразу не получится. Так что хочешь - не хочешь, но придется выполнить операцию умножения.


 
Тимохов   (2003-12-02 15:32) [6]

Конечно, можно было бы умножить количество элементов на sizeof(byte), но фиг его знает может ли в дельфи выравнивание влиять на дин. массивы (сам не знаю, в асм не лазил).
Если не может - то мой ответ верен. Если выравнивание может вилять, то как определять размер не очень понятно.


 
DVM   (2003-12-02 15:34) [7]

Даже умножение не поможет в ряде случаев:
array of string, например, перемножив мы получим не то что надо.


 
Тимохов   (2003-12-02 15:36) [8]

2dvm
Во!!! Тоже верно. И это не говоря уже о дин. мас. динамических массивов.

Все-таки надо ответить на вопрос [4].


 
han_malign   (2003-12-02 15:37) [9]

> но фиг его знает может ли в дельфи выравнивание влиять на дин. массивы

- "The $A directive controls alignment of fields in Delphi record types and class structures."

Length(BufSpeed)*sizeof(BufSpeed[0])


 
Amoeba   (2003-12-02 15:38) [10]

Естественно: array of string это массив указателей на динамические объекты, практитически то же что динамический массив динамических массивов.


 
Тимохов   (2003-12-02 15:39) [11]

han_malign © (02.12.03 15:37) [9]
Наврное, действительно, не влияет.

Тогда просто умножением...


 
Artog   (2003-12-02 15:44) [12]

Некоторые функции:
fillchar, CopyMemory, ReadFile ...
требуют количество байт.
Хотелось бы использовать sizeof(BufSpeed). Например:
fillchar(pointer(bufspeed)^, sizeof(bufspeed), ord(" ")).


 
DVM   (2003-12-02 15:48) [13]

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


 
Тимохов   (2003-12-02 15:50) [14]

Все-таки ответь на [4].
Копировать массивы нужно? Тогда придется самому разбираться со счетчиком ссылок и все-такое...


 
ghg   (2003-12-02 15:56) [15]

>Artog (02.12.03 15:44) [12]
ну ведь сказали же что нельзя сразу

что трудно вместо
sizeof(bufspeed)
написать
length(bufspeed)*sizeof(byte))?


 
han_malign   (2003-12-02 15:59) [16]

> Хотелось бы использовать sizeof(BufSpeed).
- sizeof(...) - это константа вычисляемая на этапе компиляции, поэтому использование в предложенном смысле не возможно по определению.

З.Ы. А мне хотелось бы - годовой доход, как у Билли Гейтса...


 
Artog   (2003-12-02 16:03) [17]

Всем большое спасибо!



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

Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
3-36535
a123
2003-11-21 12:06
2003.12.12
left join


14-36841
don-do
2003-11-19 14:56
2003.12.12
Господа, я тут ссылку нашел, крутой debuger, сходите, не пожалеет


1-36632
MIKL
2003-11-29 20:37
2003.12.12
Обратный цвет


1-36691
Drag0n
2003-12-02 17:29
2003.12.12
Нужен компонент типа


4-36886
STAINER
2003-10-16 09:37
2003.12.12
Проблемы с апишным popupmenu





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