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

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

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

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

Сообщение svk12 » 09.08.2013 11:07:53

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


Для первого надо распределять память вручную, с помощью SetLength ,размер устанавливается во время исполнения, для второго память выделяется при компиляции, соответственно
указанным в определении переменной размерам.
svk12
постоялец
 
Сообщения: 408
Зарегистрирован: 09.06.2008 18:42:47

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

Сообщение zub » 09.08.2013 11:42:35

переменная darray:array of integer является указателем на область памяти с заголовком и самим массивом, размер и адрес этой области памяти не известен во время компиляции
переменная sarray:array [0..10] of integer является областью областью памяти под 10 интегеров, соответственно размер и адрес области известны еще во время компиляции.
Разницы в индексировании нет, разве что @sarray вернет адрес первого элемента, а @darray вернет адрес указателя и надо использовать @darray[0]
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Mirage » 09.08.2013 15:06:47

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

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

Сообщение SeZuka » 11.08.2013 14:01:41

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

range checking по умолчанию выключен вроде как, если сделать {$R+} то конечно будет ошибка.
SeZuka
постоялец
 
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

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

Сообщение Kemet » 14.08.2013 11:02:39

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

ответ в комментариях
Kemet
постоялец
 
Сообщения: 241
Зарегистрирован: 10.02.2010 19:28:32
Откуда: Временно оккупированная территория

Пред.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru