做海报 画册的素材网站,wordpress使用微信登陆,怎么看一个网站是html5,wordpress 分类目录归档在C语言中关键字union和struct用法是一样的#xff0c;而且在项目中struct随处可见。在我的专栏嵌入式入门——C语言入门到深入中我详细的讲解了它们的异同。很多人编码了多年也许会认为有struct就够了#xff0c;要union干嘛#xff0c;感觉union的存在有些鸡肋…在C语言中关键字union和struct用法是一样的而且在项目中struct随处可见。在我的专栏嵌入式入门——C语言入门到深入中我详细的讲解了它们的异同。很多人编码了多年也许会认为有struct就够了要union干嘛感觉union的存在有些鸡肋但是事实真的是这样吗下面让我来告诉你哪些应用场景union是不能被struct替代的而且使用union也是唯一能够很好的解决问题的。我在专栏里第十五章 C语言位操作里介绍过位域这个知识点里面我也书写了个非常经典的例程。经常和微控制芯片(MCU)打交道的嵌入式工程师对位操作一定不陌生也经常接触各类的中断(中断是指在程序运行的过程中出现一些异常情况需要MCU干预并转入中断处理情况处理完后重新运行原程序的过程。计算机的运行就是靠中断来维持的键盘中断鼠标中断屏幕显示中断扬声器中断等等)。现在我使用联合和位域相结合的办法可以很好的表示它们。比如我定义如下联合体当我们要去使用各个中断的时候直接使用uint8_t类型的数据很不直观但是使用里面的位域却可以很好的表达。此时只能使用联合体而不能使用结构体。现在让我们来看看怎么使用它。我先定义两个开关中断的宏定义如下使用如下从上图可以看出位域结合联合使用是非常好表达的在代码里能很直观的表达我们自己的意图。下面附上示例的完整代码我当前使用的是deepin操作系统程序运行结果显示为Interrupts: 0xC0.至于数据存储模式大小端的知识我在专栏里也介绍过在此不再赘述。顺便说下有人可能会认为在消息队列使用时由于发送的各个消息各不相同同一时刻只能发送一个消息因此可以使用联合来节省空间这么一看貌似也对的确可以如此。但是你想过没有现在的计算机不差你那点存储空间可以大胆的去使用结构体也是可以的。如果我使用通用指针是不是是最佳的方案呢?定义如下通用指针怎么用有什么妙用我在专栏里讲解过该知识点后使用了比较多的示例去使用它要多用多体会通用指针的妙用才好。通过这一篇文章希望你可以对联合有了一个更加深刻的认识知道什么场景才是最适合它的。