It works the same way in C89. That's why
int numbers[100] = {0};
sets all 100 numbers to 0 instead of just the first one and leaving the rest indeterminate.
Yes, but first: in C89 it's not called a designated initializer, and second: it doesn't get all those zeroes "by default", as already told by jephthah, they're automatically initialized to zero because you initialized the first element.