В языке С++ массивы при объявлении можно инициализировать. Общая форма инициализации массива аналогична инициализации переменной:
тип имя_массива[размер1]...[размер№] = {список_значений};
Список_значений представляет собой список констант, разделенных запятыми. Типы констант должны быть совместимыми с типом массива. Первая константа присваивается первому элементу массива, вторая — второму и так далее. После закрывающейся фигурной скобки точка с запятой обязательна.
Предположим, что необходимо создать таблицу сообщений об ошибках, используя инициализацию массивов:
char e1[12] = "Ошибка чтения\n";
char e2[13] = "Ошибка записи\n";
char e3[18] = "Нельзя открыть файл\n";
Для задания размера массива пришлось бы вручную подсчитывать количество символов в каждом сообщении. Однако в языке С++ есть конструкция, благодаря которой компилятор автоматически определяет необходимую длину строки. Если в операторе инициализации массива не указан размер массива, компилятор создает массив такого размера, что в нем умещаются все инициализирующие элементы. Таким образом создается безразмерный массив.
|
|
Массивы переменной длины
Стандарт С++ позволяет в объявлении размера массива использовать любые выражения, в том числе такие, значение которых становится известным только во время выполнения. Объявленный таким образом массив называется массивом переменной длины. Однако переменную длину могут иметь только локальные массивы (т.е. видимые в блоке или в прототипе). Приведем пример массива переменной длины:
void f(int dim)
{
char str[dim]; /* символьный массив переменной длины */
/*... */
}
Здесь размер массива str определяется значением переменной dim, которая передается в функцию f() как параметр. Таким образом, при каждом вызове f() создается массив str разной длины.
Массивы переменной длины добавлены в С++ главным образом для поддержки численных методов обработки данных. В программировании это средство распространено достаточно широко. Однако следует помнить, что стандарт С89 и некоторые компиляторы C++ не поддерживает массивы переменной длины.
Пример
1. Подключаем библиотеки
#include <stdio.h>
2. Объявляем функцию main()
int main(void)
{
3. Объявляем две переменные t и i и маччив размером 3х4 целого типа
int t, i, num[3][4];
4. Запускаем два цикла. t изменяется от 0 до 2, I от 0 до 3
for(t=0; t<3; ++t)
for(i=0; i<4; ++i)
5. Присваиваем текущему элементу массива значение равное (t*4)+i+1
num[t][i] = (t*4)+i+1;
6. Выводим построчно содержание массива
for(t=0; t<3; ++t) {
for(i=0; i<4; ++i)
printf("%3d ", num[t][i]);
printf("\n");
}
return 0;
}