为什么以下C代码输出1?

Shr*_*ede 0 c

#include <stdio.h>
union p
{
    int x;
    char y;
} k = {1, 97};
int main()
{
    printf("%d\n", k.y);
}
Run Code Online (Sandbox Code Playgroud)

这是代码.当我用67输出替换那个97是1.如何1打印?

小智 7

您的编译器实际上应该警告您"过度初始化器"或类似的东西.尽量让更多的警告(个人推荐gcc/ clang:-std=c11 -Wall -Wextra -pedantic).

使用a union,初始化程序(不带指示符)始终初始化第一个联合成员.你不能让多个成员同时union拥有一个值,它们都共享相同的内存,所以初始化多个没有意义.如果你使用指示符,最后一个"赢".

您的编译器只删除97并使用1初始化p.x.这并不保证读数p.y会给你1,但在小端机器上,这将会发生.