Главная страница
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-36698
Murad
2003-12-02 12:03
2003.12.12
Размер пикселя на печати


1-36629
RedArc
2003-11-19 19:57
2003.12.12
хитрозадый TreeView


3-36533
RealRascal
2003-11-11 17:45
2003.12.12
Чем открыть *.dat?


14-36804
ИдиотЪ
2003-11-20 11:46
2003.12.12
а вот представьте ...


14-36802
Мазут Береговой
2003-11-18 20:07
2003.12.12
Что такое старость? Какие критерии по самооценке