关键字--union

  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...表示内存地址):

      

posted @ 2013-05-15 18:33  反光镜的博客  阅读(150)  评论(0编辑  收藏  举报