Пример 4.1 - Создание (определение) массивов
float fA [ 4 ]={ 0.1f, 0.2f, 0.3f, 0.5f };
const int iDim=3;
int iMassiv [ iDim ]={ 1, 2, 3 };
char cArray []={ ‘a‘, ‘b‘, ‘c‘, ‘d‘ };
Встретив в тексте программы указание о создании массива из элементов типа , компилятор выделяет блок памяти объема равного * и размещает в нем элементы массива в порядке, указанном в его определении.
Множество всех массивов из элементов типа является типом данных, для обозначения которого используется конструкция вида , которая не является идентификатором. Например, множество всех массивов из 10 объектов типа double образует тип double [ 10 ]. Встроенные операции над массивами в языке Си отсутствуют.
Правила языка позволяют программисту на этапе разработки приложения выделять память для массивов, элементы которых будут вычисляться позднее. Для этого следует воспользоваться специальной командой. В ней нужно указать тип элементов массива, его имя и размер, который должен быть положительной константой типа int
Type Name [ константа типа int ];
Пример 4.2 - Выделение памяти под массив
// Для массива из 10 элементов типа float
float fArray [ 10 ];
// Для массива из 13 указателей на int
const int Dim=13;
int* pInt [ Dim ];
4.2 Указатели и массивы. Доступ к элементам массивов
Указатель на константу. Указатель-константа. Адрес массива. Адреса элементов массива. Операции с указателями. Операция индексирования.
Указатели были введены в 3.3. Так называются переменные, которые используются для хранения адресов. Там же было сказано о том, что получить адрес объекта можно по его имени при помощи операции, обозначаемой символом &. Получить объект по указателю с его адресом можно при помощи операции, обозначаемой символом *. Обе операции являются унарными и имеют второй приоритет.
Если объект с именем a в ходе выполнения программы не должен изменяться, то его определение должно начинаться со слова const. Все попытки изменения таких объектов обнаруживаются на этапе компиляции с отображением соответствующих сообщений на экране дисплея. В соответствии с правилами, определение указателя на константу должно также начинаться со слова const
сonst Тип * Имя=АдресКонстанты;
В этом случае контроль за использованием такого указателя возлагается на компилятор.
Пример 4.3 - Указатели на константу
// Создание константы типа int
const int constInt=3;
// Создание указателя на константу
const int* pconstInt=&constInt;
// Попытка изменения константы является ошибкой
*pconstInt= 1; // ошибка
// Попытка создания указателя на константу является ошибкой
int* p=&constInt; // ошибка
Для того, чтобы запретить изменение значения указателя в ходе выполнения программы, необходимо включить в его определение служебное слово const.
Тип * const Имя_Указателя = АдресОбъекта;
Такие указатели называются указателями-константами.