
C语言中union应用总结.doc
2页C 语言中 union 应用总结定义共用体的类型变量的一般形式为:union 共用体名{成员列表;}变量列表;例如:union data{int i; unsigned char c[4];float f; };union data a;//定义 union 类型的变量共用体变量 a 中的成员 i、c、f 三个变量在内存中从同一个地址开始存储,即在同一个内存中可以用来存放几种不同类型的数据;共用体变量 a 所占内存的长度等于最长成员的长度,这里 c[4]和 f 的长度都为 4 字节例如进行如下赋值:a.i = 100;a.f = 100.5;那么此时共用体变量 a 中的成员 i 已经没有值了,因为存储该值的内存现在已经被用来存储成员 f 的值了共用体成员间是共享内存的,对共用体的一个成员赋值,其他成员的值跟着发生变化利用共用体成员间是共享内存的这一特性,有以下几种应用:1、 在需要将浮点数据转移时,使用共同体,按 4 个字节的 char 型数据传输,带来通信效率的提高一般浮点数发送方法:是将浮点数放大一定的倍数,再取整,再按整数的高低位传输还需要传输这个放大的倍数,如果浮点数是个负数的话,还要将符号位一并发送。
接收方收到这几条报文后,才能将数据还原但是接收方还原的浮点数据与发送方发送的浮点数不一样,因为小数位数发生变化使用共同体就不会出现这个问题了,在接收方,使用共同体,将收到到的 4 个 char 数据赋值给 a.c 数组,a.f 就是还原的数据,这个数据和发送的数据是一样的,也不管发送的浮点数是正还是负如有 a.f = -12.34; 则 a.c[0] = 0xa4, a.c[1] = 0x70, a.c[2] = 0x45, a.c[3] = 0xc1如有 a.c[0] = 0xa4, a.c[1] = 0x70, a.c[2] = 0x45, a.c[3] = 0xc1,则 a.f =-12.34使用这种方式传输浮点数,数据是不会丢失的,报文也更简单2、 将浮点数保存到文件中时,保存为 4 个字节的 char 型数据,节约空间如果保存为文本需要占用的字节数等于数值的字符的个数,有可能占用 1~20 字节,而用共用体的char 型数据,占用的空间大小固定为 4 字节,对大量浮点数据的存储,节约的空间更多,分析保存的浮点数也是很方便的3、 用在强制类型转换上如将 int 数据转为 float,可以这样使用 union: a.i =1234;赋值后,a.f 就是转换后的值等于 1234。
