工会变量如何访问成员?

时间:2019-06-05 18:12:25

标签: c

#include <stdio.h>

union p
{
    int x;
    char y;
} k = {1, 97};

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

答案是1,但我不知道如何。有人可以解释吗?

1 个答案:

答案 0 :(得分:3)

初始化器的第一个成员放入联合的第一个命名成员,因此更改所有成员的值,因为联合的所有成员共享相同的内存。然后,从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’)