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

     

  • 相关阅读:
    Nexus OSS 3 搭建 Docker & Git LFS 仓库
    YARN FairScheduler
    k8s基本概念及使用
    k8s 基本使用
    10款非常实用的在线网站原型设计工具
    Spark常见问题及性能调优
    spark常见问题处理
    TensorFlow 基本使用
    c语言数组的操作
    在Android开发中遇到的MediaPlayer问题
  • 原文地址:https://www.cnblogs.com/muhuacat/p/8268974.html
Copyright © 2020-2023  润新知