Главная страница
    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.47 MB
Время: 0.007 c
6-36796
SH
2003-10-14 20:03
2003.12.12
Сокеты


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


3-36502
Элина
2003-11-22 17:59
2003.12.12
Как в SQL проверить поле на нулевое значение


3-36573
Лариса
2003-11-20 13:31
2003.12.12
Запрос


3-36570
Developerr
2003-11-20 11:42
2003.12.12
Как перевисти текст из поля Memo в обычную строку?





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