Форум: "Основная";
Текущий архив: 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