繁体   English   中英

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

[英]Why does the following C code output 1?

#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初始化px 这并不能保证读py会给您1 ,但是在小字节序的计算机上会发生这种情况。

因为除struct之外的union覆盖了其成员。 初始化两个成员都没有意义。

您的程序是未定义的-您只能初始化联合的一个成员,因为占用的所有成员都存储在同一地址。 令您惊讶的是,您的C编译器没有为此感到兴奋,您是否禁用了警告? 一旦跳入未定义状态,就不会告诉编译器将做什么。

因为它是一个并集,所以只需要一个初始化值。 第二个被忽略。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM