Ответ 1
Только самое внутреннее измерение можно опустить. Размер элементов в массиве выводится для типа, заданного переменной массива. Поэтому тип элементов должен иметь известный размер.
-
char a[];
имеет элементы (например,a[0]
) размера 1 (8 бит) и имеет неизвестный размер. -
char a[6];
имеет элементы размера 1 и имеет размер 6. -
char a[][6];
имеет элементы (например,a[0]
, который является массивом) размера 6 и имеет неизвестный размер. -
char a[10][6];
имеет элементы размера 6. и имеет размер 60.
Не разрешено:
-
char a[10][];
будет иметь 10 элементов неизвестного размера. -
char a[][];
будет иметь неизвестное количество элементов неизвестного размера.
Размер элементов является обязательным, компилятор нуждается в его доступе к элементам (через арифметику указателя).