• 共用体,及与结构体的比较


    1.编译器会为结构体变量中的每个数据成员分配不同的地址空间,编译器为共用体分配的是同一块内存,每个时刻只用一个数据成员有意义。

    • 共用体:节约内存
    • 共用体占用字节长度,取共用体中字节最长的成员。 几个成员共用一片内存。

    2.共用体任何时侯只会出现其体内变量中的一个。
    3.结构体成员的地址不同,共用体的每一个成员地址相同。


    4.若变量不再同一时刻出项,可以用共用体来存储他们。
    5.共用体宽度(字节数)就是最长的那个,但是必须能够整除最宽基本类型成员,若是不够则补充。
    6.两者取最短也适用于共用体。

    两者关于typedef:

    typedef unsigned long int num1,num2,num3;    //三个都是类型名。
    typedef union myunion
    {
        int num;
        double db;
    }a,b;    //a,b 都是类型名
    
     a a1 = {.db = 11.9};    //对结构体或者共用体中的指定成员赋值

     **** 改变一个变量就会影响整个共用体。
    union pc pc1 = { 20 };
    union pc pc[3] = { {20}, {20}, {20}}; //数组初始化的一般形式,变量名与类型名可以重名。
    union pc *p = (union pc []){ {20}, {20}, {20}};  
    union Myunion m1,m2;

    • 共用体不能引用共用体变量,只能引用其成员。
    • 共用体变量中起作用的成员是最后一次存放的成员。


    union Myunion un2 = un1; //浅拷贝
    深拷贝,自己分配内存,然后复制。
    un2.p = moloc(100);
    strcpy(un2.p,un1.p);


    • 结构体中可以用共用体,也可以共用体中有结构体,但是两个不能相会嵌套。
  • 相关阅读:
    jmeter-实用插件
    python学习笔记
    TODO redis学习笔记
    查询redis数据
    【洛谷P1341】无序字母对
    【洛谷P1100】高低位交换
    【洛谷P1118】数字三角形
    【洛谷P1538】迎春舞会之数字舞蹈
    【洛谷P2947】向右看齐
    【洛谷P1351】[NOIP2014]联合权值
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5705485.html
Copyright © 2020-2023  润新知