Same goes for pointers.
int *foo = &bar;
*foo = 1;
As far as syntax goes, tying the pointer to the identifier doesn't make sense to me, at least. Pointers associated with types makes much more sense: int* foo = &bar;
C++ thinks so too.
The array syntax makes even less sense!
I think what you’re missing in your examples is how the values are used after declaration. C syntax was designed so that declaration resembles use. The reason array subscript brackets come after the variable name is because that’s how you access elements of the array: