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


一、union 简介

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

二、union 定义

1. 声明共用体类型

一般形式具体如下:

union 共用体名
{//成员列表数据类型 成员名;数据类型 成员名;....
}

举例说明如下:

union _MQ
{char data8[4];int  data32;
};

2. 定义共用体变量

一般形式具体如下:

union _MQ
{char data8[4];int  data32;
};
//定义共用体变量
union _MQ mq;

合并简化形式具体如下:

union _MQ
{char data8[4];int  data32;
}mq;

匿名结构体形式具体如下:

union
{char data8[4];int  data32;
}mq;

3. 使用 typedef 声明共用体类型,再定义共用体变量

一般形式如下:

typedef union MQ
{char data8[4];int  data32;
} _MQ;
//定义共用体变量,以下两种效果一样
union MQ mq;
_MQ mq;

匿名共用体形式具体如下:

typedef union
{char data8[4];int  data32;
} _MQ;
//定义共用体变量
_MQ mq;

三、union 使用方法

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

初始化定义时----赋值

typedef union
{char data8[4];int  data32;
}_MQ; _MQ mq =
{.data32=0x12345678
};

初始化后----赋值

mq.data32=0x12345678;

union(共用体)----共用内存

#include <stdio.h>typedef union
{char data8[4];int  data32;
}_MQ; _MQ mq =
{.data32=0x12345678
};int main(int argc, char *argv[])
{printf("data[0]=0x%x\n",mq.data8[0]);printf("data[1]=0x%x\n",mq.data8[1]);printf("data[2]=0x%x\n",mq.data8[2]);printf("data[3]=0x%x\n",mq.data8[3]);return 0;
}

运行结果如下:

union(共用体)----判断系统大小端模式

我的电脑系统是小端模式

大端模式(高字节在前) 小端模式(低字节在前)
data32 data[0] data[1] data[2] data[3] data[0] data[1] data[2] data[3]
0x12345678 0x12 0x34 0x56 0x78 0x78 0x56 0x34 0x12

四、union 占用的内存空间

union(共用体) 占用的内存空间,是由其中占用内存最大的成员变量决定的。

#include <stdio.h>typedef union
{char data1;int  data2;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;
}

运行结果如下:

五、位结构和共用体联合使用

具体程序如下:

#include <stdio.h>typedef union
{int  data;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;
}

运行结果如下:

解释说明:

变量 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
a(1) 1
b(3) 11 (3)
c(6) 110 (6)
d(10) 1010 (10)
e(26) 011010 (26)

结果是0b0110101010110111=0x6ab7


C语言:位结构体

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

  1. C语言程序设计(Part Ⅸ)——链表/共用体类型/枚举类型

    C语言程序设计(Part Ⅸ)的整理笔记,若有错误,欢迎指正. 用指针处理链表 如果有一批数据要存储和引用,有两种方法: 一种方法是采取分配固定存储单元的方法,例如数组.但是在程序执行期间,数组的大小 ...

  2. 【C++】(十五)自定义数据类型——共用体类型、枚举类型

    文章目录 自定义数据类型--共用体类型.枚举类型 1 共用体类型 2 枚举类型 3 typedef 自定义数据类型--共用体类型.枚举类型 1 共用体类型 共用体(union)是一种成员共享存储空间的 ...

  3. C语言:关键字---struct(声明结构体类型)

    C语言32个关键字 有32个关键字详细说明,还有跳转链接! 一.struct-简介 struct就是结构体,用来描述需要相同类型或不同类型数据的数据对象. 通俗的说法就是打包封装,将一些分散的数据整合 ...

  4. 【c语言基础必备】共用体union

    共用体是C 语言的另外一种构造类型,与前面介绍的结构体类似.共用体也由基本数据结构组合而成,但是共用体和结构体却有本质区别,因为结构体中的每个成员都占用存储单元,所以结构体所占用的内存大小为所有成员各 ...

  5. C语言n番战--共用体和枚举(八)

    嵌入式之路,贵在日常点滴 ---阿杰在线送代码 目录 一.共用体 共用体的声明以及访问 如何理解"共用体的所有成员占用同一段内存" 共用体的暂用空间的大小 用途: 二.枚举 三.t ...

  6. C 语言编程 — 高级数据类型 — 共用体

    目录 文章目录 目录 前文列表 共用体 定义共用体 访问共用体成员 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本 ...

  7. c语言不同类型指针间的强转,C语言中不同的结构体类型的指针间的强制转换详解...

    C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险.只要理解了其内部机制,你会发现C是非常灵活的. 一. 结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在 ...

  8. 【C语言】共用体的定义与使用

    目录 一.共用体数据类型的定义 二.共用体变量的定义 三.共用体内存分配 四.共用体变量的初始化和引用 一.共用体数据类型的定义 共用体类型同结构体类型一样,都属于构造类型,它在定义上与结构体类型十分 ...

  9. c语言关键字大全(32个)

    C 语言可以像汇编语言一样对位.字节和地址进行操作,而这三者是计算机最基本的工作单元.以下是店铺为大家整理的c语言关键字大全,欢迎阅读 1.auto :声明自动变量 2.break:跳出当前循环 3. ...

最新文章

  1. cacti命令行添加监控详解
  2. 属性为nil的时候测试是否crash  nil是不会崩溃的
  3. loj #6053 简单的函数 min_25筛
  4. xmpp muc 群聊协议 1
  5. eclipse 设置 默认编码为 utf-8
  6. [译]Hour 7 Teach.Yourself.WPF.in.24.Hours
  7. 最简单,最明了,看了就会的VScode和C++的配置!(Visual Studio Code)
  8. 微型计算机最怕的是什么,为什么以前学生上“微机课”都要穿鞋套?老师:怕电脑中病毒...
  9. java工作流flowable
  10. python3 import的一个细节
  11. DAOS 源码解析之 daos_api
  12. 图像加密-安全性分析
  13. Oracle问题imp-10019:由于ORACLE错误12899而拒绝行
  14. Windows Snapshot Grabber 2020中文版
  15. 微信开放平台开发 微信登录
  16. python语法速成方法_一天快速入门Python语法基础之函数
  17. 会声会影浪漫婚礼视频——美到想哭
  18. 2020/7/17 积分不等式/反常积分/定积分应用
  19. linux下调整分辨率
  20. Android检测模拟器

热门文章

  1. 微支付js-api,java版的坑。
  2. bzoj1492 货币兑换cash dp斜率优化+splay/cdq分治
  3. ChatGPT报错:Too many requests in 1 hour. Try again later.
  4. 媒体的态度和立场如何掌握?
  5. python 3.6.5 java jdk版本_eclipse开发者版本下载-eclipse ide for java developers最新版v3.6.0 pc版 - 极光下载站...
  6. 关于版本号正则表达式中英文符号问题
  7. C: warning C275: expression with possibly no effect
  8. tkinter+miniblink实现网页组件
  9. 程序包无效:“CRX_HEADER_INVALID“ 解决办法
  10. 论坛php 图片上传,Discuz上传图片失败的解决方法