如何解释这个C联盟输出

14 c unions

#include <stdio.h>
union p
{
    int x;
    char y;
}
k = {.y = 97};

int main()
{
    printf("%d\n", k.y);
    return 0;
}

OUTPUT: 97
Run Code Online (Sandbox Code Playgroud)

我遇到了这个问题.我们知道我们只能初始化Union的第一个成员.但在此,在初始化时,y变量通过一些给定的方法初始化!

任何人都可以向我解释一下k = {.Y = 97}是如何破坏Dennis Ritchie的书中所说的规则"联盟只能用其第一个成员的类型初始化"并初始化第二个变量?

gko*_*s90 15

K&R是一本很棒的书,但它已经很老了.在C99你可以这样做.

在同一示例中使用指定的初始值设定项,以下内容初始化第二个union成员年龄:

union {
       char birthday[9];
       int age;
       float weight;
      } people = { .age = 14 };
Run Code Online (Sandbox Code Playgroud)