Первый член инициализатора помещается в первый именованный член объединения, поэтому изменяется значение всех членов, поскольку все члены объединения совместно используют одну и ту же память. Затем чтение из y
считывает из значения, хранящегося в объединении, или 1
.
Второй элемент инициализатора на практике игнорируется, но должен выдавать диагностику компилятора для совместимых компиляторов.
Для GCC эта диагностика должна выглядеть примерно так:
test.c:7:11: warning: excess elements in union initializer
} k = {1, 97};
^~
test.c:7:11: note: (near initialization for ‘k’)