![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте.
Есть тривиальный кусок кода: Код:
var
i: integer;
mas_p:array[0..100] of integer;
begin
for i:=0 to 80 do
mas_p[i]:=i;
ShowMessage(IntToStr(low(mas_p))); // выдает 0
ShowMessage(IntToStr(high(mas_p))); // выдает 100
ShowMessage(IntToStr(length(mas_p))); // выдает 101
ShowMessage(IntToStr(SizeOf(mas_p))); // выдает 404
end;Почему delphi7 выдает high = 100? Когда у меня введено в массив только 81 значение И как правильно получить количество значений в массиве (в данном примере 81)? |
|
#2
|
||||
|
||||
|
Функция Low возвращает минимальный индекс массива, функция high - максимальный индекс массива. Тоесть, если ты массив обьявишь так:
Код:
mas_p:array[-14..87] of integer; Функция length возвращает длину массива, SizeOf - размер (в байтах) переменной=длина массива*SizeOf(элемент массива)=101*4 (4 - размер типа Integer). Чтобы найти минимальное и максимальное значения, нужно осуществлять перебор по элементам массива и выбырать меньшее/большее. |
|
#3
|
||||
|
||||
|
Цитата:
у тебя массив длинной 101 элемент mas_p:array[0..100] of integer; заполняешь его значениями ты только до mas_p[80] --> for i:=0 to 80 do остальное за тебя кто-то другой заполняет. Решение при заполнении использовать конструкцию Код:
for i:=Low(mas_p) to High(mas_p) do |
|
#4
|
||||
|
||||
|
-даже если ты ничего "не введешь" 100 будет
-никак, либо считать самому -используй списки (TList), динамические массивы |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
o919322 (03.10.2012)
| ||
|
#5
|
|||
|
|||
|
Цитата:
По-умолчанию при инициализации массива значения массива чем заполнены? Как определить что значение не заполнено? Можно простой пример? |
|
#6
|
||||
|
||||
|
Массив - это участок памяти. Каждый условный участок - это большое количество бит. У бита есть 2 состояния - единица или ноль, у него нет "пустого" состояния. Чем заполнен массив после объявления? Как повезёт. Иногда - нулями, иногда - мусором, оставшимся после того, как этот же блок освободил кто-то другой.
|
|
#7
|
||||
|
||||
|
Есть такое понятие как динамический массив
Код:
var
Ar:array of IntegerКод:
SetLength(Ar,0) Код:
SetLength(Ar,Length(Ar)+1) работа с массивом также Код:
Ar[i]:=i; когда ты создаёшь массив Delphi только выделяет память из имеющейся свободной и ни кто не знает что было в этой памяти до того как она стала свободной, там могу быть нули а может быть и шлак всякий Код:
SetLength(Ar,Length(Ar)-1) функция Код:
Length(Ar) P.S. нумерация элементов динамического массива начинается с 0 |
| Этот пользователь сказал Спасибо Lost_Fish за это полезное сообщение: | ||
Евгений79 (05.10.2012)
| ||