#include <stdio.h>
union p
{
int x;
char y;
} k = {1, 97};
int main()
{
printf("%d\n", k.y);
}
答案是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’)