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系统为小端方式。

     

  • 相关阅读:
    D. Constructing the Array
    B. Navigation System
    B. Dreamoon Likes Sequences
    A. Linova and Kingdom
    G. Special Permutation
    B. Xenia and Colorful Gems
    Firetrucks Are Red
    java getInstance()的使用
    java 静态代理和动态代理
    java 类加载机制和反射机制
  • 原文地址:https://www.cnblogs.com/muhuacat/p/8268974.html
Copyright © 2011-2022 走看看