Инициализация зависит от того, где и как определяется переменная.Ваш код в порядке (после того, как путаница по x
и z
разрешена), и ваши утверждения верны.
Если это переменная области действия файла (в отличие от внутренней функции), возможно, с внешнейсвязывание, то оно инициализируется при запуске программы.Это модный разговор для глобальной переменной или статической переменной файла.
struct s a[10];
static struct s b[10];
Они инициализируются нулями, поскольку явного инициализатора нет.
Статическая переменная внутри функции такжеинициализируется как нули (при отсутствии явных инициализаторов):
int function1(void)
{
static struct s c[10];
...
}
Массив c
инициализируется нулями.
Автоматические переменные не инициализируются, если вы не предоставите инициализатор:
int function2(void)
{
struct s d[10]; /* Not initialized */
struct s e[10] = { 0 }; /* Initialized - all 10 elements are zeroed */
struct s f[10] = { &d[0], &d[1], &e[9] };
/* 3 are initialized to given values, the rest to zero */
struct s g[10] = { [9] = &e[9] };
/* The first 9 are zeroed; the last is &e[9] */
}
Последний использует назначенный инициализатор из C99.