I kind of wrote the number; the compiler calculates from the initialization list how many elements the array must have. That is a compile-time constant.
You could both write a number (X) into brackets and give an initialization list (for Y elements), but then you have three possibilities:
1. Y == X. That you get without writing the X too.
2. Y < X. Some elements are initialized with the values you give. The rest are value-initialized. For basic types that means zero-initialization.
3. Y > X. Syntax error.