功能描述:聯合體或共用體 Union 的介紹及使用方法
一、Union 簡介
共同體(union)也稱為聯合體,它能在同一個內存空間中存儲不同的數據類型(不是同時存儲),其典型的用法是,設計一種表以存儲既無規律、事先也不知道順序的混合類型。
聯合體占用的字節數是所有成員中占用字節數最多的那個成員的字節數。一次只存儲一個值,即使有足夠的空間,也不能同時存儲兩個成員的值。
union ABC
{unsigned char A;unsigned short B;unsigned int C;
};
則 sizeof(ABC) 為 4。
二、賦值方法
union ABC
{unsigned char A;unsigned short B;unsigned int C;
};ABC m;
m.A = 5;????????? // 此時A、B、C均為5
m.B = 55;???????? // 此時A、B、C均為55
因為 A、B、C 共用一個內存塊,所以對其中的一個值賦值,其所有成員的值都相同。
三、常用場景
位字段拼接
union ABC
{struct AB{unsigned short A : 11;unsigned short B : 5;} ab;unsigned short C;
};ABC m;
m.ab.A = 0;
m.ab.B = 0b10000;???
qDebug() << QString::number(m.C,2);? // 0b1000 0000 0000 0000
C 的值與結構體 ab 的值相同,使用 union 無需再使用 memcpy,簡單方便。
四、測試驗證
在 Qt 中的測試驗證代碼如下:
#include <QApplication>
#include <QDebug>//union ABC
//{
// unsigned char A;
// unsigned short B;
// unsigned int C;
//};union ABC
{struct AB{unsigned short A : 11;unsigned short B : 5;} ab;unsigned short C;
};int main(int argc, char *argv[])
{QApplication a(argc, argv);// ABC m;
// m.B = 5;
// qDebug() << sizeof(ABC) << m.A << m.B << m.C;// m.C = 55;
// qDebug() << sizeof(ABC) << m.A << m.B << m.C;ABC m;m.ab.A = 0;m.ab.B = 0b10000;qDebug() << QString::number(m.C,2);return 0;
}