如何解释这个C联盟输出

时间:2013-06-16 17:26:24

标签: 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

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

任何人都可以向我解释 k = {。Y = 97} 是如何违反Dennis Ritchie所着的规则“联盟只能用其第一个成员类型的值初始化“而是初始化第二个变量?

1 个答案:

答案 0 :(得分:15)

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

  

在同一示例中使用指定的初始化程序,如下所示   初始化第二个工会会员年龄:

union {
       char birthday[9];
       int age;
       float weight;
      } people = { .age = 14 };