联合体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("%c\n", u1.c); //输出100

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

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

   

    return 0;

}

#include <stdio.h>
/*
时间:2022-05-12 15:16
作者:sgbl888
功能:联合union
知识点:
    1、联合的成员是共用内存,一次只有一个成员有效。也就是说对哪个成员操作,那个成员才是有效。其它成员是无效的结果
    2、
    3、
*/
//结构
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:%u\ts.s:%u\ts.l:%u\n", &s.c, &s.s, &s.l); //s.c:6422032     s.s:6422034     s.l:6422040
    printf("s use %zu Byte\n", sizeof(s));

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

    return 0;

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


    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值