您的位置:首页 > 编程语言 > C语言/C++

C++ 共用体:union

2017-03-23 15:39 148 查看
union主要是将各种类型的数据存放在一段固定的存储器中,存储器的大小由union中需要最大存储器的数据类型决定。

union student{
char ***;
int age;
long number;
double score;
};

其中long、double需要16个字节,而char只需要1个字节,因此该共用体占用16个字节,union的关键是不同的数据类型共用存储器。

实例:

1、确定CPU的模式:大、小端模式确定

大小端不同,则存储方式也存在差别,比如int需要4个字节,而char只需要1个字节,根据一个字节所在的具体位置即可判定CPU的模式

union CPU
{
     int i;
     char ch;
};
void testCPUMode(void)
{
    union CPU Test;
    Test.i = 1;
    if(Test.ch == 1)
    {
      //小端模式
    }
    else
    {
       //大端模式
    }
}


2、实现不同数据之间的类型转换

各种类型的数据共用存储空间,很方便的实现了不同数据类型之间的转换,不需显示的强制类型转换。

struct register{
char a;
char b;
char c;
char d;
};

union Register
{
   struct register;
   int whole;
};


3、寄存器的定义,实现整体访问及单项访问

struct register{
char a;
char b;
char c;
char d;
};

union Register
{
   struct register;
   int whole;
};

能实现单项和整体的访问,在引入位域操作等相关结构以后,可实现每个bit的访问。

union UnionData { /*定义一个 共用体*/  
        int num;  
        struct { /*在 共用体 中定义一个结构*/  
            char first;  
            char second;  
        } sChar;  
    } uData;  
  
    //共用体 成员赋值  
    // 赋值给num 0x4241,由于共用内存,也相当对first赋值0x41,second赋值0x42  
    // 由ascii码表得:first='A' second='B'  
    uData.num=0x4241;  
    cout << "uData.sChar.first="<< uData.sChar.first << " uData.sChar.second=" << uData.sChar.second << endl;

实例http://blog.csdn.net/sodino/article/details/41599931

通信中的数据包会用到共用体。因为不知道对方会发一个什么包过来,用共用体的话就很简单了,定义几种格式的包,收到包之后就可以直接根据包的格式取出数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 实例