c - 为什么下面的 C 代码输出 1?

标签 c

#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/

相关文章:

c - 使用 Lex 替换文本文件中句号后的第一个字符

c - C语言中AES混合列 block 的伽罗瓦域乘法

c - clang 选项的别名?

c - 动态二维阵列打印C : why does my array only print out a single line

c - 将 C 翻译成 MIPS 汇编

c - 空指针取消引用未初始化的内存是否属于内存损坏

字母字符的字符到整数转换关闭

c++ - 在 Big Endian 和 Little Endian 机器中解释 32 位整数的混淆

c - 从函数返回 char* 和 char[] 有什么区别?

c++ - 如果 void 类型的函数什么都不返回会怎样?