You have to initialize all the values in the array, not just one. And by the way, a[3] does not exist.
Strictly speaking not exactly true.
For global data in a conforming compiler you do not need to initiaise the data at all. A conforming platform will automatically zero all memory locations that have not been explicitly initialised to something else.
If you want to you can initialise part of an array or structure in this case the rest of the array or structure is initialised to 0.
You use of a for loop was not initialisation, it was assignment after the variable had already been created and initialised (to 0).
Variables that appear on the stack do not get initialised in the same way (as they don't exist when the program starts), initialisation of stack variable often acts much more like assignment e.g. initialise a stack based array to zero and you end up with an assignment to each location.
While you can partially initialise an array or structure (i.e. don't provide values for all indexes/members) I would normally consider it poor practice to do so and some compilers will issue a warning.