栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

联合体union 亦可称为共用体

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

联合体union 亦可称为共用体

联合体union<称为共用体亦可>是C语言的一种特殊的结构类型。与结构体struct很相似,除了共同内存、名称不一样,其它使用基本上都一样,包括指针等。

注意点:

  • union它的成员是共用同一块内存(若对一个成员赋值,其它成员会被覆盖掉)
  • union它占用的字节数,是union成员级别最高的类型占用的字节数
  • union类似于其它语言的变体(如既可赋值int类型、赋值float类型、字符串类型等)

union 联合体名称{

        成员列表

};

共用同一块内存:

union{

    char c;

    short s;

    long long l;

} u1;

int main(){

    u1.c = 100;

    printf("%cn", u1.c); //输出100

    u1.s = 0; //对成员s赋值为0

    printf("%cn", u1.c); //成员c和l都被覆盖,竟然也都是0了。因此是共用一块内存

   

    return 0;

}

#include 

//结构
struct st{ //st共占用1+1+2+4+8=16字体(为什么?因为 内存对齐)
    char c; //1个字节,留了1个字节
    short s; //2个字节,留了4个字节
    long long l; //8个字节
};

//联合,un占用字节数就是成员l占用的字节数
union un{
    char c;
    short s;
    long long l;
};

int main(){
    //结构struct
    struct st s;
    printf("s.c:%uts.s:%uts.l:%un", &s.c, &s.s, &s.l); //s.c:6422032     s.s:6422034     s.l:6422040
    printf("s use %zu Byten", sizeof(s));

    union un u; //定义联合变量u
    printf("u.c:%utu.s:%utu.l:%un", &u.c, &u.s, &u.l); //u.c:6422024     u.s:6422024     u.l:6422024
    printf("u use %zu Byten", sizeof(u));
    u.c = 'h';
    printf("u.c:%cn", u.c);
    u.s = 0; //对成员s操作后,只能保证成员s是正确的结果,其它成员可能不正确。因为是共用体,一次只有一个成员有效
    printf("u.c:%dn", u.c);
    printf("u.s:%hdn", u.s);
    u.l = 5000;
    printf("u.l:%lldn", u.l);

    return 0;

    //联合指针访问
    union un *pu = &u; //联合指针,指向联合变量u
    (*pu).l = 500;
    printf("u.l:%lldn", u.l);
    pu->s = 100;
    printf("u.l:%lldn", u.l);


    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879206.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号