В отдельных случаях допускается объявление массива с неопределенным числом элементов (“пустыми” квадратными скобками). Один из таких немногих случаев – при инициализации массива с использованием списка начальных значений. При таком объявлении размер “безразмерного” массива определяется числом элементов в списке:
int days[] = { 31, 28, 31, 30, 31, 31, 30, 31, 30, 31, 30, 31};
// Автоматическое определение размера массива
Данное объявление объявляет и инициализирует массив days из 12 элементов, то есть с размером 12.
Допускается подобное использование “безразмерных” многомерных массивов. При такой, “списковой” инициализации можно не задавать размер только первого (самого левого) измерения массива. Например, объявление массива temp можно переписать так:
double temp[][3] = { { 3.2, 3.3, 3.4}, { 4.1, 3.9, 3.9} };
(размерностью массива temp будет 2 на 3).
Безразмерные массивы типа char можно инициализировать c помощью строковых констант (литералов):
char digits[] = "0123456789";
Размер массива digits явно не задан, он определяется исходя из размера инициализирующего его литерала, в данном случае 11 (10 символов плюс нулевой символ).
Данное объявление можно рассматривать как краткую форму записи объявления
char digits[] = {'0','1','2','3','4','5','6','7','8','9','\0'};