Say there are types and incomplete types:
struct A;
It is an incomplete type of structure called A. Although
struct A { };
It is a complete type of structure named A. The size of the first is unknown, and the size of the second is known.
Incomplete types of classes exist, similar to the structure described above. But there are also incomplete array types:
typedef int A[];
This is an incomplete type of array called A. Its size is not yet known. You cannot create an array from it because the compiler does not know how large the array is. But you can use it to create an array only if you initialize it immediately:
A SomeArray = { 1, 2, 3 };
Now the compiler knows that the array is an int array with 3 elements. If you try to initialize the array with a pointer, the compiler will not be smarter than before and will refuse because it will not give the size of the array that will be created.
source share