没腿的鸟 发表于 2022-6-25 23:47:44

C语言:关键字---union(声明共用体类型)

C语言32个关键字
有32个关键字详细说明,还有跳转链接!
一、union 简介

union 是C语言中一种声明共用体的数据类型。
union(共用体)在某种程度上类似struct(结构体)的一种数据结构,可以包含很多数据结构和变量。
union(共用体)的特点:其内部的数据 共用一个内存首地址,共享同一段内存,以达到节省空间的目的。
二、union 定义

1. 声明共用体类型

一般形式具体如下:
union 共用体名
{
   //成员列表
   数据类型 成员名;
   数据类型 成员名;
   ....
} 举例说明如下:
union _MQ
{
        char data8;
        intdata32;
}; 2. 定义共用体变量

一般形式具体如下:
union _MQ
{
        char data8;
        intdata32;
}; //定义共用体变量union _MQ mq; 合并简化形式具体如下:
union _MQ
{
        char data8;
        intdata32;
}mq; 匿名结构体形式具体如下:
union
{
        char data8;
        intdata32;
}mq; 3. 使用 typedef 声明共用体类型,再定义共用体变量

一般形式如下:
typedef union MQ
{
        char data8;
        intdata32;
} _MQ;
//定义共用体变量,以下两种效果一样
union MQ mq;
_MQ mq; 匿名共用体形式具体如下:
typedef union
{
        char data8;
        intdata32;
} _MQ;
//定义共用体变量
_MQ mq; 三、union 使用方法

共用体变量成员----赋值(.)

初始化定义时----赋值
typedef union
{
        char data8;
        intdata32;
}_MQ;

_MQ mq =
{
        .data32=0x12345678
}; 初始化后----赋值
mq.data32=0x12345678; union(共用体)----共用内存

#include <stdio.h>

typedef union
{
char data8;
intdata32;
}_MQ;

_MQ mq =
{
.data32=0x12345678
};

int main(int argc, char *argv[])
{
        printf("data=0x%x\n",mq.data8);
        printf("data=0x%x\n",mq.data8);
        printf("data=0x%x\n",mq.data8);
        printf("data=0x%x\n",mq.data8);
       
        return 0;
} 运行结果如下:
https://img-blog.csdnimg.cn/8cd45517187a4ecba02d69d514962d4d.png
四、union 占用的内存空间

union(共用体) 占用的内存空间,是由其中占用内存最大的成员变量决定的。
#include <stdio.h>

typedef union
{
        char data1;
        intdata2;
        float data3;
        double data4;
}_MQ;
_MQ mq;

int main(int argc, char *argv[])
{
        printf("data1占用的%d字节\n",sizeof(mq.data1));
        printf("data2占用的%d字节\n",sizeof(mq.data2));
        printf("data3占用的%d字节\n",sizeof(mq.data3));
        printf("data4占用的%d字节\n",sizeof(mq.data4));
    printf("共用体占用的%d字节\n",sizeof(mq));

return 0;
} 运行结果如下:
https://img-blog.csdnimg.cn/d756edb0498346fa9730e5062fc33fc9.png
五、位结构和共用体联合使用

具体程序如下:
#include <stdio.h>

typedef union
{
        intdata;
        struct
        {
                int a:1;//第0位
                int b:2;//第1,2位
                int c:3;//第3,4,5位
                int d:4;//第6,7,8,9位
                int e:6;//第10,11,12,13,14,15位
        }bit;
}_MQ;

_MQ mq=
{
   .bit.a = 1,
   .bit.b = 3,
   .bit.c = 6,
   .bit.d = 10,
   .bit.e = 26
};

int main(int argc, char *argv[])
{
        printf("data=0x%x\n",mq.data);
        return 0;
} 运行结果如下:
https://img-blog.csdnimg.cn/7782e37e69cb4ce68c42d3ff27b7054f.png
解释说明:
变量15 14 13 12 11 109 8 7 65 4 32 10a(1)1b(3)11 (3)c(6)110 (6)d(10)1010 (10)e(26)011010 (26)结果是0b0110101010110111=0x6ab7
C语言:位结构体

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: C语言:关键字---union(声明共用体类型)