В этом примере по первой
} nlist[2][3] = {
{1, 2, 3}, {4, 5, 6), {7, 8, 9),/* строка 1 */
{10,11,12), {13,14,15}, {16,17,18} /* строка 2 */
};
В этом примере по первой левой фигурной скобке в строке 1 начинается инициализация подмассива
nlist[0], который является массивом из трех структур. Значения 1, 2, 3 назначаются трем элементам первой структуры (
nlist[0][0]). Когда встретится правая фигурная скобка (после значения 3), инициализация подмассива
nlist[0] закончится и две оставшиеся структуры —
nlist[0][1] и
nlist[0][2] — будут по умолчанию инициализированы нулевыми значениями. Аналогично, список {4,5,6} инициализирует первую структуру во второй строке
nlist (т. е.
nlist[1][0]),
а оставшиеся две структуры —
nlist[l][l] и
nlist[1][2] — по умолчанию инициализируются нулевыми значениями. Когда компилятор языка Си обнаружит следующий список инициализаторов {7,8,9), он попытается инициализировать подмассив
nlist[2]. Однако, поскольку
nlist содержит только две строки и элемента
nlist[2] в нем не существует, будет выдано сообщение об ошибке.
Пример 3.
union {
char m[2][3];
int i, j, k;
} y = {
{'1'},
{'4'}
};
В третьем примере инициализируется переменная у типа объединение. Первым элементом объединения является массив; он и будет инициализироваться. Список инициализаторов {'1'}
задает значения для первой строки массива (m[0]). Поскольку в списке всего одно значение, то только первый элемент строки массива — m[0][0] —инициализируется символом '1', а оставшиеся два элемента в строке инициализируются по умолчанию нулевыми значениями (символом '\0').
Аналогично, первый элемент второй строки массива m инициализируется значением '4',
а остальные элементы инициализируются по умолчанию нулевыми значениями.
Содержание Назад Вперед