博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关键字--union
阅读量:5310 次
发布时间:2019-06-14

本文共 865 字,大约阅读时间需要 2 分钟。

  union关键字的用法与struct比较类似,不同的是union中的所有变量共用一段储存空间,同一个时刻union中只能储存数据成员中的一种,所以union可用的内存空间大小为最大长度成员变量的字节数。

  例如:

    union test
    {
      char c;
      short m;
      int * n;
      long long int k;
    };
    test的的成员变量中,占用字节数最多的是k,所以test占用空间大小就是k占用的字节数(32位机器下为8字节)。
  计算机大小端对union的影响:
    先解释一下大小端,大端模式即高字节的数据储存在内存的低地址中(逆);小端模式即高字节的数据储存在内存高地址中(顺)。
    分析一段代码:
    int check()
    {
      union test
      {
        int i;
        char c;
      }TS;
      TS.i = 1;
      return (TS.c == 1);
    }
    调用check()函数返回的结果是多少呢?
    在上面的代码中‘TS.i = 1;’因为int类型为4个字节,这一句实际上就是在test的四个字节中分别写入0x00,0x00,0x00,0x01; 而'TS.c'的含义就是取到test的最低一个字节的数据。
    test的最低一个字节的数值就要涉及计算机的大小端模式了,在小端模式下,0x01放在最低字节,所以 TS.c == 0x01;在大端模式下,0x01放在最高字节,最低字节为0x00,所以 TS.c == 0x00.

    用一个图片来说明,就很清楚了(其中0x100,0x101...表示内存地址):

      

转载于:https://www.cnblogs.com/kai-jiang/archive/2013/05/15/3080394.html

你可能感兴趣的文章
怎么在windows7系统我的电脑中添加快捷方式
查看>>
QT - 内存泄漏检测
查看>>
三层架构
查看>>
epoll使用具体解释(精髓)
查看>>
数据库设计笔记
查看>>
JPA进行insert操作时会首先select吗
查看>>
AndroidArchitecture
查看>>
完美实现Silverlight动态加载
查看>>
原生JavaScript第六篇
查看>>
JS基础学习3
查看>>
Tennis Championship
查看>>
SQL
查看>>
JavaScript基础-var
查看>>
51Nod 1684 子集价值 (平方和去括号技巧)
查看>>
bzoj千题计划312:bzoj2119: 股市的预测(后缀数组+st表)
查看>>
javascript 进阶篇1 正则表达式,cookie管理,userData
查看>>
安装Endnote X6,但Word插件显示的总是Endnote Web"解决办法
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
C#读写TXT文件
查看>>
unity, 忽略碰撞
查看>>