in this code:
#include <stdio.h>
int main(void)
{
int a[2][3] = {{1,2},{4,5,6}};
printf("%d\n",a[0][2]);
return 0;
}
The output is 0 – since the array wasn’t initialized, is this output a result of some undefined behaviour?
>Solution :
From the C Standard (6.7.9 Initialization)
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.
and
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;
So in fact this declaration
int a[2][3] = {{1,2},{4,5,6}};
is equivalent to
int a[2][3] = {{1,2, 0},{4,5,6}};