zoukankan      html  css  js  c++  java
  • 联合体union和大小端(big-endian、little-endian)


    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
    ",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 ",data.i); }
    复制代码

    结果:

    11020304

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

     

  • 相关阅读:
    代码规范圣战
    代码复审结果
    个人工程总结
    第一周个人博客作业
    软工课程总结
    软件工程课程的建议
    大泥球你好~
    第一次会议记录
    软件工程的瀑布, 大泥球, 教堂,集市,和银弹
    vs2013——单元测试&& 性能图
  • 原文地址:https://www.cnblogs.com/muhuacat/p/8268974.html
Copyright © 2011-2022 走看看