zoukankan      html  css  js  c++  java
  • 共用体union

    union共用体名

    {

      类型名 成员名1;

      类型名 成员名2;

      ……

      类型名 成员名n;

    }

      由于各个成员变量在内存中都使用同一段存储空间,因此共用体变量的长度等于最长的成员长度,共用体的访问方式和结构体类似。

      下面是一个用共用体的程序,推断一下这个程序的输出是什么:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     union key{
     6         int k;
     7         char ch[2];
     8     }u;
     9     
    10     u.k = 258;
    11     printf("%d %d
    ", u.ch[0], u.ch[1]);  
    12     return 0;
    13 }

    正确的输出是:,你做对了吗?

    一开始我以为输出结果是: 1  2,因为258的二进制表示为:0000 0001 0000 0010,这两个字节分别为1 和 2

    后来我又认为答案是:0 0, 因为258完整的4字节二进制表示是:0000 0000 0000 0000 0000 0001 0000 0010前两个字节值为0,这里的错误就是ch应该是从低字节开始存的,所以占用的应该是int的两个低字节空间,但是前面的把258的4字节完整展开的形式就让我误以为这就是258在内存中的存储形式,认为前面两个字节就是低字节,从而误以为ch是占用的是前面两个值为0的字节,但是,但是这种展开式其实是高字节在前,低字节在后,所以258在内存中实际的存储形式是所以低字节是02 和01,所以ch[0] 应该等于02, ch[1] 应该等于01,于是得到了这样的输出。

  • 相关阅读:
    BZOJ 3744 Gty的妹子序列
    BZOJ 3872 Ant colony
    BZOJ 1087 互不侵犯
    BZOJ 1070 修车
    BZOJ 2654 tree
    BZOJ 3243 向量内积
    1003 NOIP 模拟赛Day2 城市建设
    CF865D Buy Low Sell High
    CF444A DZY Loves Physics
    Luogu 4310 绝世好题
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/9715665.html
Copyright © 2011-2022 走看看