Работа с указателями

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

SeZuka писал(а):От сюда собственно и вопрос в чем глобальное отличие array of integer от array [0..0] of integer?


Для первого надо распределять память вручную, с помощью SetLength ,размер устанавливается во время исполнения, для второго память выделяется при компиляции, соответственно
указанным в определении переменной размерам.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

переменная darray:array of integer является указателем на область памяти с заголовком и самим массивом, размер и адрес этой области памяти не известен во время компиляции
переменная sarray:array [0..10] of integer является областью областью памяти под 10 интегеров, соответственно размер и адрес области известны еще во время компиляции.
Разницы в индексировании нет, разве что @sarray вернет адрес первого элемента, а @darray вернет адрес указателя и надо использовать @darray[0]
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

Отличие в том и состоит, что для дин. массивов ты через GetMem память не можешь выделить, т.к. это не просто кусок памяти, а структура данных. Там длина еще хранится, счетчик ссылок. Поэтому это делается через SetLength.
Кстати, с объявлением вида array [0..0] of integer, при обращении по индексу больше нулевого, будет range check error. Ведь у тебя же включен range checking?:)
Лучше заранее знать максимальный индекс и объявлять с ним: TIntArray = array [0..$FFFF] of integer;
SeZuka
постоялец
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

Сообщение SeZuka »

Mirage писал(а):Ведь у тебя же включен range checking?:)

range checking по умолчанию выключен вроде как, если сделать {$R+} то конечно будет ошибка.
Kemet
постоялец
Сообщения: 241
Зарегистрирован: 10.02.2010 18:28:32
Откуда: Временно оккупированная территория
Контактная информация:

Сообщение Kemet »

SeZuka писал(а):От сюда собственно и вопрос в чем глобальное отличие array of integer от array [0..0] of integer?

ответ в комментариях
Ответить