Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.12;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
1-36614
MPS
2003-12-03 07:45
2003.12.12
Функция возвращ. X


1-36664
hooky-mars
2003-11-30 15:34
2003.12.12
Как остледить обращения к файлам


3-36551
Sodven
2003-11-20 21:09
2003.12.12
XML и БД


7-36867
TGrey
2003-10-05 13:43
2003.12.12
Работа с BIOS-ом из под WinXP


4-36885
NikolayP
2003-10-17 18:55
2003.12.12
Считывание из файла при запуске программы