This declaration
char ch[10] = { 'h', 'e', 'l', 'l', 'o' };
is equivalent to this declaration
char ch[10] = { "hello" };
that in turn is equivalent to the following declaration
char ch[10] = "hello";
and all these declarations are equivalent to the following declaration
char ch[10] = { 'h', 'e', 'l', 'l', 'o', '\0', '\0', '\0', '\0', '\0', };
That is elements of the array that do not have explicit initializers are implicitly zero-initialized.
From the C Standard (6.7.9 Initialization)
10 If an object that has automatic storage duration is not initialized
explicitly, its value is indeterminate. If an object that has static
or thread storage duration is not initialized explicitly, then:
...
— if it has arithmetic type, it is initialized to (positive or
unsigned) zero;
and
19 The initialization shall occur in initializer list order, each
initializer provided for a particular subobject overriding any
previously listed initializer for the same subobject;151) all
subobjects that are not initialized explicitly shall be initialized
implicitly the same as objects that have static storage duration.