Инициализация массивов

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

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

Ответить
Pasha-V
новенький
Сообщения: 11
Зарегистрирован: 28.03.2015 03:30:52

Инициализация массивов

Сообщение Pasha-V »

Доброго времени! :)

Не подскажите, почему компилятор FP не умеет определять массивы, а множества умеет?
Например, нельзя a := (5, 8, 2), но можно s := [5, 8, 2].
Mikhail
энтузиаст
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Сообщение Mikhail »

Pasha-V писал(а):Доброго времени! :)

Не подскажите, почему компилятор FP не умеет определять массивы, а множества умеет?
Например, нельзя a := (5, 8, 2), но можно s := [5, 8, 2].


Можно инициализировать глобальные переменные при объявлении

Код: Выделить всё

var a: array[0..3] of integer = (1, 2, 3, 4);


можно использовать конструктор открытого массива, например так

Код: Выделить всё

procedure test(const a:array of integer);
begin
end;


вызов

Код: Выделить всё

test([1, 2, 3, 4, 5])


Конструктора массива, как для множеств, увы, нет.
Pasha-V
новенький
Сообщения: 11
Зарегистрирован: 28.03.2015 03:30:52

Сообщение Pasha-V »

Это я знаю. Можно сделать так — const a: array[0..3] of integer = (1, 2, 3, 4).
Но это же не константа и элементы можно изменить. А как сделать массив констант?
Mikhail
энтузиаст
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Сообщение Mikhail »

Pasha-V писал(а):Это я знаю. Можно сделать так — const a: array[0..3] of integer = (1, 2, 3, 4).
Но это же не константа и элементы можно изменить. А как сделать массив констант?

Нельзя их изменить, там от ключа компилятора, вроде как, поведение типизированных констант зависит.
Аватара пользователя
bormant
постоялец
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Сообщение bormant »

Pasha-V писал(а):Но это же не константа и элементы можно изменить. А как сделать массив констант?

http://www.freepascal.org/docs-html/ref/refse10.html
Support for assigning values to typed constants is controlled by the {$J} directive: it can be switched off, but is on by default (for Turbo Pascal compatibility).
Ответить