Скажите, что есть типы и неполные типы:
struct A;
Является неполным типом структуры с именем A. В то время как
struct A { };
Является полным типом структуры, называемой A. Размер первого еще не известен, а размер второго известен.
Существуют неполные типы классов, такие как приведенная выше структура. Но есть и неполные типы массивов:
typedef int A[];
Это неполный тип массива с именем A. Его размер еще не известен. Вы не можете создать массив из него, потому что компилятор не знает, насколько большой массив. Но вы можете использовать для создания массива, только , если вы сразу его инициализируете:
A SomeArray = { 1, 2, 3 };
Теперь компилятор знает, что массив является массивом с тремя элементами. Если вы попытаетесь инициализировать массив указателем, компилятор не будет более умным, чем раньше, и откажется, потому что это не даст ему размер создаваемого массива.