Инициализация одномерных массивов
Термином «инициализация» обозначают возможность задать начальные значения элементов массива без программирования соответствующих действий. Например, не прибегая к программным средствам типа присвоения значений в цикле или считывания данных из внешнего источника (файл, клавиатура, блок данных).
В С++ одновременно с объявлением массива можно задать начальные значения всех элементов массива или только нескольких первых его компонент.
Например:
float t[5]={1.0, 4.3, 8.1, 3.0, 6.74};
char b[7]={'П','р','и','в','е','т'};
/*в данных примерах длину массива компилятор вычисляет по количеству начальных значений, перечисленных в фигурных скобках*/
int d[10]={1, 2, 3};
char a[10]="Привет";
/*в данных примерах определяется значение только заданных переменных d[0],d[1],d[2] и a[0],a[1],...,d[9], остальные элементы не инициализируются*/
Если в определении массива явно указан его размер, то количество начальных значений не может быть больше количества элементов в массиве.
Пусть необходимо проинициализировать массивы для создания таблицы сообщений об ошибках:
char e1[12] = "read error\n";
char e2[13] = "write error\n";
char e3[18] = "cannot open file\n";
Очевидно, что подсчитывать «вручную» количество символов в каждом сообщении для подсчета размерности массивов очень трудоемко. Однако можно заставить С++ автоматически определить размеры этих массивов с помощью инициализации безразмерных массивов. Для этого в операторе инициализации не надо указывать размер массива, и С++ автоматически создаст массив, который сможет содержать присутствующий инициализатор. Используя этот подход, получим следующую таблицу сообщений:
char e1[] = "read error\n";
char e2[] = "write error\n";
char e3[] = "cannot open file\n";
Компилятор С++ сам сформирует нужное значение по количеству инициализирующих данных. В нашем случае под массив e2 будет отведено 13 байтов, включая последний байт с нулевым кодом, завершающий каждую строку. Оператор
printf("%s имеет длину, равную %d\n",e2,sizeof (e2));
выведет на экран
write error
имеет длину, равную 13
Метод инициализации безразмерных массивов не только менее трудоемок, но и позволяет заменить любое сообщение, без перерасчета размера соответствующего массива.
Дата добавления: 2015-02-16; просмотров: 730;