#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
,但在小端机器上,这将会发生.