【问题标题】:Why is the output 0 2 all the time when it should be garbage? [duplicate]为什么输出 0 2 一直是垃圾? [复制]
【发布时间】:2014-06-23 18:25:54
【问题描述】:
#include<stdio.h>
int main()
{
    union a
    {
        int i;
        char ch[2];
    };  
    union a z = {512};
    printf("%d %d",z.ch[0],z.ch[1]);
    return 0;
}

输出为:0 2
为什么输出 0 2,应该是一些垃圾值?

【问题讨论】:

  • "0 2" 和其他任何东西一样垃圾。

标签: c unions


【解决方案1】:

当您刚刚告诉它初始化为i512 时,我不确定您为什么希望编译器为您生成垃圾。 512 的最低两个有效字节是02

特定于实现的行为与垃圾不同。

【讨论】:

  • 我已经将i初始化为512,那么z.ch[0]和z.ch[1]的值是怎么变成0和2的呢?根据我的说法,它应该是垃圾值,因为我们只是在初始化 i 而不是 ch[]。如果我错了,请解释实际发生了什么?我刚刚了解了工会。
  • @Sagar,union 的成员共享相同的内存地址。当您初始化i 并读取ch 时,您基本上是使用ch 将刚刚写入i 的4 个字节解释为单个字节。
猜你喜欢
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多