zoukankan      html  css  js  c++  java
  • 联合体union和大小端(bigendian、littleendian)

    1.联合体union的基本特性——struct的同与不同

    union,中文名联合体、共用体,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。

    在成员完全相同的情况下,structunion占用的内存要多一些。

    原因是Cstructunion的内存分配机制不同:

    struct中,所有的成员都有自己的存储空间,而且为了便于寻址和管理,所有的数据成员都要遵循内存对齐的规则;

    union中,所有的成员共用一块存储空间,在操作不同的成员时,编译器依据不同的成员类型,按照不同的方式取值。

    2.联合体union所占内存空间大小:

    #include<stdio.h>
    union unionTest{
            int a;
            double b;
    }
    main(){
            union unionTest test;
            printf("The sizeof of test is %d\n",sizeof(test));       
    }

    结果:

    The sizeof of test is 8

    说明:联合体所分配内存空间的大小为联合体中所占字节最大成员的大小。

    3.联合体union和大小端(big-endianlittle-endian): 

    #include<stdio.h>
    union var{
            char c[4];
            int i;
    };
    int main(){ union var data; data.c[0] = 0x04;//因为是char类型,数字不要太大,算算ascii的范围~ data.c[1] = 0x03;//写成16进制为了方便直接打印内存中的值对比 data.c[2] = 0x02; data.c[3] = 0x11;//数组中下标低的,地址也低,按地址从低到高,内存内容依次为:04,03,02,11。总共四字节!
    //而把四个字节作为一个整体(不分类型,直接打印十六进制),应该从内存高地址到低地址看,0x11020304,低位04放在低地址上。 printf("%x\n",data.i); }

    结果:

    11020304

    说明我的32位win7系统为小端方式。

     

     

     

  • 相关阅读:
    ASP.NET MVC5+ 路由特性
    老李分享:大数据,数据库,数据仓库之间是什么关系
    老李分享:DBA
    老李提问:开源家族你认识几个
    米尔格伦连锁信实验
    老李分享:六度分隔理论
    三者关系
    老李分享:JDK,JRE,JVM区别与联系
    Linux简介与厂商版本下
    Linux简介与厂商版本上
  • 原文地址:https://www.cnblogs.com/JaneZSS/p/4368500.html
Copyright © 2011-2022 走看看