设为首页收藏本站 |天气与日历| 2025-04-20 星期日 05:58:00 乙巳(蛇)年 三月廿三 卯时 谷雨
     
切换到窄版

私人站点

 找回密码
 立即注册
搜索
查看: 133|回复: 0

union 共用体(联合体)

[复制链接]

954

主题

954

帖子

3875

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3875
发表于 2021-12-7 12:53:25 | 显示全部楼层 |阅读模式
l 联合union是一个能在同一个存储空间存储不同类型数据的类型;
l 联合体所占的内存长度等于其最长成员的长度倍数,也有叫做共用体;
l 同一内存段可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用;
l 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员的值会被覆盖;
l 共用体变量的地址和它的各成员的地址都是同一地址。
#include <stdio.h>
//共用体也叫联合体
union Test
{
        unsigned char a;
        unsigned int b;
        unsigned short c;
};
int main()
{
        //定义共用体变量
        union Test tmp;
        //1、所有成员的首地址是一样的
        printf("%p, %p, %p\n", &(tmp.a), &(tmp.b), &(tmp.c));
        //2、共用体大小为最大成员类型的大小
        printf("%lu\n", sizeof(union Test));
        //3、一个成员赋值,会影响另外的成员
        //左边是高位,右边是低位
        //低位放低地址,高位放高地址
        tmp.b = 0x44332211;
        printf("%x\n", tmp.a); //11
        printf("%x\n", tmp.c); //2211
        tmp.a = 0x00;
        printf("short: %x\n", tmp.c); //2200
        printf("int: %x\n", tmp.b); //44332200
        return 0;
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|编程站点 ( 冀ICP备2023028127号-2 )|友链申请|

GMT+8, 2025-4-20 05:58 , Processed in 0.094943 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表