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,于是得到了这样的输出。

  • 相关阅读:
    大道至简第一张读后感
    字符串加密
    写一个类,在任何时候都可以向它查询创建了多少个类
    类与对象动手动脑
    2016年读书清单
    2016-09-01
    Spring笔记(五)--注解方式实现AOP
    Spring笔记(三)--代理模式
    Spring笔记(四)--公共属性的配置
    表达式之谜
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/9715665.html
Copyright © 2011-2022 走看看