打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
共用体union的妙用
结构体struct是一个常用的数据类型,主要是将各种类型的数据打包成一个新的数据类型,在驱动开发,寄存器的定义等方面都有比较大的优势。在使用的过程中需要注意空结构体的大小以及对齐(8字节)对数据大小的影响。具体的应用就不说了。另一个与struct非常相近的数据类型union则相对运用的较少,但是如果理解了union的本质就会发现该数据类型的好处。
union主要是将各种类型的数据存放在一段固定的存储器中,存储器的大小由union中需要最大存储器的数据类型决定。比如:
union student
{
    char ***;
    int age;
    long number;
    double score;
};
其中long、double需要16个字节,而char 只需要1个字节,因此该共用体占用16个字节。union的关键是不同的数据类型共用存储器。

主要的运用:
1、确定CPU的模式:大端、小端模式确定
大小端不同,则存储的方式也存在差别,比如int需要4个字节,而char只需要1个字节,根据1个字节所在的具体位置即可判定CPU的模式
union TestCPU
{
     int i;
     char ch;
};
void testCPUMode(void)
{
    union TestCPU Test;
    Test.i = 1;
    if(Test.ch == 1)
    {
      //这个CPU是小端模式
    }
    else
    {
       //这种情况下就是大端模式
    }
}

2、实现不同数据之间的类型转换
union Type
{
   int i;
   char ch;
   long lint;
   ....
};

...
union Type type;
这样各种类型的数据共用存储空间,很方便的实现了不同数据类型之间的转换,不需要显示的强制类型转换。

union相比struct更加的节省空间。

3、寄存器的定义,实现整体的访问和单项的访问。
struct register
{char a;
char b;
char c;
char d;
};

union Register
{
   struct register;
   int whole;
};
这样就能实现单项和整体的访问,特别是引入位域操作等相关结构以后,能够实现每一个bit的访问
其他的优势需要总结,我暂时写这三点了。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
从零开始学习C语言构造数据类型共用体
编程中国
关于union和struct的内存分配
【C++学习笔记】深入了解C++ 结构体与共用体,看这篇就够了!
串口传输数据时,结构体如何转换
小议大小端模式对C语言的共用体结构的影响
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服