不良网站正能量进入窗口,都匀市住房和城乡建设局网站,网站建设与网页设计案例教程pdf下载,网站怎么做不违法转自#xff1a;http://blog.csdn.net/feimor/article/details/6858103 使用C语言时#xff0c;常常使用struct#xff0c;对于union类型却几乎没有用过#xff0c;只知道它是联合类型#xff0c;各字段共享一块内存#xff0c;实际应用中却不知道它的具体用途。 今天读《…转自http://blog.csdn.net/feimor/article/details/6858103 使用C语言时常常使用struct对于union类型却几乎没有用过只知道它是联合类型各字段共享一块内存实际应用中却不知道它的具体用途。 今天读《编程卓越之道》中看到有对其使用的简单介绍记录在此 首先摘录一下struct和union的重要区别 struct为每个字段在不同的偏移处分配存储空间而联合则将所有的字段重叠在内存中的相同偏移处。 联合类型的用途 1、创建别名。别名是内存对象原名之外的其他名字。比如在程序中经常会用到将一个数据类型强制转换为另一个类型这个操作可以使用联合来代替。 比如typedef union{ char c; uint32 u; }CharOfUnion v; 可以通过v.u来操作一个uint32类型的对象当需要将uint32变量的低端字节看做一个字符的时候只需要访问v.c就可以了。 实际应用中大多数的协议结构定义中都会使用union类型来定义。 2、使用联合来将较大的对象分解成组成这个对象的各个字节。尤其在单片机编程中将float拆解成char typedef union{ uint u; char bytes[4]; }asBytes composite; 可以使用composite.bytes数组来访问composite.u字段的各个字节。 转自http://blog.163.com/yx_xie2007/blog/static/1024642532011101411940162/ 一直以来union都是个很少用到的东西对于这些不常用的结构往往记不住。这次看书又看到了还是学习一下吧。一般在Windows API的一些数据结构中才能看到这个union其实并不复杂。本质上来说和结构体是一样的但是从包装的角度来看有差异。 1、union中可以定义多个成员union的大小由最大的成员的大小决定。 2、union成员共享同一块大小的内存一次只能使用其中的一个成员。 3、对某一个成员赋值会覆盖其他成员的值也不奇怪因为他们共享一块内存。但前提是成员所占字节数相同当成员所占字节数不同时只会覆盖相应字节上的值比如对char成员赋值就不会把整个int成员覆盖掉因为char只占一个字节而int占四个字节 4、联合体union的存放顺序是所有成员都从低地址开始存放的。下面看一个简单的代码 #include stdio.h typedef union{ char c; int a; int b;}Demo; int main(int argc, char **argv){ Demo d; d.c H; d.a 10; d.b 12; printf(size: %d\n, sizeof(d)); printf(%c\t%d\t%d\n, d.c, d.a, d.b); return 0;} 原创文章转载请注明:本文出自程序人生 C语言union(联合体 共用体) ps红色字体部分为本人添加。 转载于:https://www.cnblogs.com/shirishiqi/p/5416935.html