Стандартная сек. 8.3/4 говорит:Массив с неизвестными границами
Массив связан также могут быть опущены, когда описатель следует инициализатор (8.5).
Все нормально. Следующие отлично компилируется:
int a[] = {1};
int main()
{
}
Но 8,3/4 также говорит
Когда несколько «массив» спецификации являются смежными, многомерный массив создается; только первый из констант выражения, которые определяют границы массивов, могут быть опущены.
и следующие
int a[][2];
int main()
{
}
не компилирует
Но если мы добавим инициализатор следуют после описателя:
int a[][1] = {{1}};
int main()
{
}
Он отлично работает. Хотя стандарт не указывает, что декларатор многомерного массива должен следовать инициализатором. Не могли бы вы объяснить это?
Применяется обычное правило об исключении границ. 'int a [] [2]' - это точное объявление в функциональных параметрах или в контекстах, где допускаются неполные типы. Без инициализатора он объявляет массив 'a' неполного типа -" неизвестной границей массива из 2 'int'. –