#include <stdio.h>
union p
{
int x;
char y;
} k = {1, 97};
int main()
{
printf("%d\n", k.y);
}
这是代码。当我用 67 替换 97 时,输出是 1。1
是如何打印的?
最佳答案
你的编译器实际上应该警告你“过多的初始化器”或类似的东西。尝试启用更多警告(gcc
/clang
个人推荐:-std=c11 -Wall -Wextra -pedantic
)。
对于 union
,初始化程序(没有指示符)总是初始化第一个 union 成员。您不能让 union
的多个成员同时持有一个值,它们都共享相同的内存,因此初始化多个是没有意义的。如果您使用指示符,则最后一个“获胜”。
您的编译器只是丢弃 97
并使用 1
来初始化 p.x
。这并不能保证读取 p.y
会给你 1
,但在小端机器上,这会发生。
关于c - 为什么下面的 C 代码输出 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46977165/