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

     

     

     

  • 相关阅读:
    财务统计
    Drupal 7 模 .info 文件描述
    怎么样MyEclipse配置Tomcat?
    QQ旅程server分析01-网关server
    UVa 988
    人工智能的策略,如果国家优先发展”梦想成真”?
    苹果公司的新的编程语言 Swift 高级语言(十一)--初始化类的析构函数的一个实例
    【剑指offer】两个队列实现堆栈
    证券从业改革
    Qt调用word 例子
  • 原文地址:https://www.cnblogs.com/JaneZSS/p/4368500.html
Copyright © 2011-2022 走看看