C语言进阶-第30讲:联合体及其与结构体的区别
来源:互联网 发布:广发证券交易软件 编辑:程序博客网 时间:2024/05/17 01:35
联合体,几个不同的成员变量共占用同一段内存的结构,也称为共用体。
变量在内存中占的字节数不同,但都从同一地址开始使用,其占用的空间长度为最长成员空间长度。
而结构体结构体各成员使用的空间长度连贯,长度为各成员长度之和;
联合体提供了从不同角度看待(比如数字和字符间的相互转换)去看同一段内存空间里的内容
即,联合体内的成员是内存的"多种表现方式",但"本质是唯一的”。
而结构体内的成员变量,不仅表现方式不同,每个变量均有各自的内存空间。
#include <stdio.h>union un{ int i; short int si[2]; char c[4];};int main(){ union un x; x.c[0]='A'; x.c[1]='B'; x.c[2]='C'; x.c[3]='D'; printf("%c, %c, %c, %c\n", x.c[0], x.c[1], x.c[2], x.c[3]); printf("%d, %d\n", x.si[0], x.si[1]); printf("%d\n", x.i); return 0;}
这也意味着对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了,
即,内存单元里面的内容变化,各种表现形式也会跟着变化。
而对于struct的不同成员赋值是互不影响的。
union myun{ struct { int x; int y; int z; }u; int k;}a;int main(){ a.u.x =4; a.u.y =5; a.u.z =6; a.k = 0; printf("%d %d %d\n",a.u.x,a.u.y,a.u.z); return 0;}
union应用:
假设网络或控制协议中需要传送三种报文,其格式分别为packetA、packetB、packetC:
struct structA{ int a; char b; }; struct structB{ char a; short b; }; struct structC{ int a; char b; float c; }在真实的通信中,每次只能发三类报文中的一种,我们可以将三类报文的结构体组织为一个union(共享一段内存,但每次有效的只是一种),然后和报文类型字段统一组织成一个报文数据结构。
struct CommuPacket{ int iPacketType; //报文类型标志 union{ //每次传送的是三种报文中的一种,使用union struct structA packetA; struct structB packetB; struct structC packetC; } };
阅读全文
0 0
- C语言进阶-第30讲:联合体及其与结构体的区别
- C语言基础数据类型 结构体和联合体的区别
- C语言及程序设计进阶例程-30 联合体及其应用
- C语言中的联合体与结构体
- C语言-结构体与联合体
- C语言结构体与联合体
- 【C语言常识】结构体与联合体
- C语言进阶-第32讲:位运算及其应用
- 联合体与结构体的区别
- C语言进阶-第11~13讲:结构体(含数组和函数)
- C语言进阶-第15~16讲:结构体(含指针和函数)
- C语言进阶-第15~16讲:结构体应用(学生成绩统计)
- C语言进阶-第15~16讲:结构体应用(玩转日期和时间)
- C语言——结构体与联合体
- C语言——结构体与联合体
- C语言结构体,联合体,枚举与typedef
- 【C/C++】结构体和联合体的区别
- 【C/C++】结构体和联合体的区别
- java高并发
- 人脸数据库
- 《TCP/IP详解 卷1》 笔记: 广播和多播
- 【学习C++】学习C++ -> 字符串
- 第一篇博文
- C语言进阶-第30讲:联合体及其与结构体的区别
- 利用JAVA实现2+22+222+2222+22222的问题
- mysql 强制使用索引和强制不使用索引
- window xp安装DB2_ESE_97_Win_x86
- javascript开发迷你音乐播放器
- iOS :undefined symbols for architecture x86_64的延伸
- size
- 欢迎使用CSDN-markdown编辑器
- hihoCoder 1515 分数调查