博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学点 C 语言(28): 数据类型 - 联合(union)
阅读量:5882 次
发布时间:2019-06-19

本文共 1797 字,大约阅读时间需要 5 分钟。

  hot3.png

在结构中, 每个字段的数据类型是唯一的; 使用联合可以在一个字段中储存不同的数据类型.
不同的数据类型共享一块内存. 当然其内存大小应依着大的来.
联合中的数据, 非此即彼, 只有一个有效; 应该有说明在某个数据中此时有用的是什么类型.
除了共享内存以外, 联合与结构一样.

1. union 的大小是其中最大数据成员的大小:

#include 
int main(void){ union MyUnion { short n1; int n2; double n3; }; printf("%u, %u\n", sizeof(union MyUnion), sizeof(double)); getchar(); return 0;}
2. union 的特点是共享内存, 修改一个其他都会变:

#include 
#include
int main(void){ union MyUnion { unsigned char n1; unsigned short n2; unsigned int n3; } U = {0}; printf("%10u, %10u, %10u\n", U.n1, U.n2, U.n3); U.n2 = USHRT_MAX; printf("%10u, %10u, %10u\n", U.n1, U.n2, U.n3); U.n3 = INT_MAX; printf("%10u, %10u, %10u\n", U.n1, U.n2, U.n3); U.n1 = 0; printf("%10u, %10u, %10u\n", U.n1, U.n2, U.n3); getchar(); return 0;}
3. 在结构中使用联合:

#include 
int main(void){ enum UnionTyte{SHORT, INT, FLOAT}; struct Rec { unsigned ID; enum UnionTyte type; /* 识别字段 */ union { /* 联合 */ short s; int i; float f; } u; } R[4]; size_t i; R[0].ID = 1; R[0].type = SHORT; R[0].u.s = 123; R[1].ID = 2; R[1].type = INT; R[1].u.i = 12345; R[2].ID = 3; R[2].type = FLOAT; R[2].u.f = 3.14; R[3].ID = 4; R[3].type = INT; R[3].u.i = 54321; for (i = 0; i < sizeof R / sizeof R[0]; i++) { switch (R[i].type) { case SHORT : printf("%u: %hd\n", R[i].ID, R[i].u.s); break; case INT : printf("%u: %d\n", R[i].ID, R[i].u.i); break; case FLOAT : printf("%u: %g\n", R[i].ID, R[i].u.f); break; } } getchar(); return 0;}

转载于:https://my.oschina.net/hermer/blog/320987

你可能感兴趣的文章
在ASP.NET MVC 中获取当前URL、controller、action
查看>>
设计TCP服务器的规则
查看>>
[原创]阿里笔试题之战报交流
查看>>
基于Windows api手柄映射编程
查看>>
并发01-聊聊并发
查看>>
tcp端口
查看>>
02-2设置第一启动项--进入Bios界面设置U盘为第一启动项
查看>>
博客园 markdown 设置
查看>>
图论相关算法理解和总结
查看>>
centos 安装mysql
查看>>
memcached
查看>>
几种验证码方式对比
查看>>
[C++] any number to binary (Bit manipulation)
查看>>
Java -- 反射机制
查看>>
eclipse汉化
查看>>
C++——overloading
查看>>
SSM+PageHelper+jqGrid实现数据分页
查看>>
netty+Protobuf (整合一)
查看>>
Java编程——跳动的文字
查看>>
【web】movie review——静态页面训练、css训练
查看>>