При объявлении массивов их можно инициализировать, т.е. присвоить элементам конкретные значения.
Инициализация – это объединение определения объекта с одновременным присваиванием ему конкретного значения. Она позволяет изменить формат определения массива. Например, можно явно не указывать количество элементов одномерного массива, а только перечислить их начальные значения в списке инициализации:
double seq [] = {1.0, 2.1, 3.2, 4.3, 5.0};
В данном примере будет определен одномерный массив из пяти элементов, причем
seq[0]=1.0 seq[1]=2.1 seq[2]=3.2 seq[3]=4.3 seq[4]=5.0
Если в определении массива явно задан его размер, то количество начальных значений не может быть больше количества элементов в массиве (в таком случае компилятор выдаст ошибку типа «too many initializers»).
В случае, когда количество начальных значений меньше заданного размера массива – будут присвоены начальные значения только группе первых элементов массива (элементам с меньшим значением индекса):
int seq [4] = {1, 2};
В данном примере будут определены только элементы seq[0]=1 и seq[1]=2, в то время как элементы seq[2] и seq[3]останутся неопределенными.
Как видно из представленных примеров, одномерный массив инициализируется заключенным в фигурные скобки списком начальных значений. При инициализации многомерных массивов, в соответствии с определением их как одномерного массива с элементами-массивами, используются вложенные фигурные скобки.
int matr[3][2] = {{2,3}, {4,5}, {6,7}};
Эта запись эквивалентна последовательности операторов присваивания:
matr[0][0]=2 matr[0][1]=3 matr[1][0]=4 matr[1][1]=5 matr[2][0]=6 matr[2][1]=7
Тот же самый результат можно получить с одним списком инициализации в форме:
int matr[3][2] = {2, 3, 4, 5, 6, 7};
Как и для одномерных массивов могут быть проинициализированы не все значения многомерного массива:
double M[4][6] = { {1.0}, {2.2}, {44.2}, {8.0} };
- начальные значения получат элементы только первого столбца матрицы M.
В многомерных массивах требуется некоторое время на вычисление каждого индекса. Поэтому доступ к элементу в многомерных массивах происходит медленнее, чем доступ в одномерных массивах. Поэтому для многомерных массивов память чаще всего выделяется динамически.
В С отсутствует проверка границ массивов. Можно легко выйти за конец массива и записать значение в какую-либо область, не относящуюся к массиву. Вся работа по проверке границ массива возлагается на программиста.
Массивы символов. Массивы символов, содержащие строки, допускают удобную инициализацию в виде:
char <имя_массива> [размер] = “строка”;
char str [6] = “hello”;