欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中關于union的使用方法說明

 更新時間:2022年11月24日 10:45:41   作者:棉猴  
這篇文章主要介紹了C++中關于union的使用方法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

1 概述

1.1 定義

union即為聯(lián)合,它是一種特殊的類。通過關鍵字union進行定義,一個union可以有多個數(shù)據成員。

例如:

union Token{
   char cval;
   int ival;
   double dval;
};

以上代碼定義了一個名為Token的聯(lián)合,該聯(lián)合中包含了3個數(shù)據成員。

1.2 互斥賦值

在任意時刻,聯(lián)合中只能有一個數(shù)據成員可以有值。

當給聯(lián)合中某個成員賦值之后,該聯(lián)合中的其它成員就變成未定義狀態(tài)了。

Token token;
 
token.cval = 'a';
 
token.ival = 1;
 
token.dval = 2.5;

以上代碼定義了聯(lián)合Token的一個變量token,此時token所占內存的數(shù)據如圖1所示。

圖1 token所占內存數(shù)據

紅色方框內的數(shù)據即為token所占內存數(shù)據。因為token中長度最大的變量是double類型,所以token的長度是8個字節(jié)。

之后首先為token的變量cval賦值,此時token所占內存的數(shù)據如圖2所示。

 

圖2 token所占內存數(shù)據

此時,token所占內存的第一個字節(jié)的值變?yōu)?x61,即字符’a’。

接下來為token的變量ival賦值,此時token所占內存的數(shù)據如圖3所示。

 

圖3 token所占內存數(shù)據

此時,token所占內存的前四個字節(jié)變?yōu)?x00000001,即為數(shù)字1。在對token的ival賦值之后,cval的值就變?yōu)榱?x01,實際上就沒有意義了。

最后,為token的變量dval賦值,此時token所占內存的數(shù)據如圖4所示。

圖4 token所占內存數(shù)據

此時,token所占內存的八個字節(jié)都有了相應的值。在對token的dval賦值之后,cval的值變?yōu)榱?x00,而ivale的值變?yōu)榱?x00000000,都沒有了實際意義,也就是之前提到的未定義狀態(tài)。

1.3 訪問權限

聯(lián)合可以為其成員指定public、protected和private等訪問權限,默認情況下,其成員的訪問權限為public。在“1.1 定義”中定義的聯(lián)合Token,其三個成員的訪問權限均為public。

2 為成員指定長度

在“1.2 互斥賦值”中提到,聯(lián)合的存儲空間至少能夠容納其最大的數(shù)據成員。

也可以為聯(lián)合的成員指定長度。

通過冒號操作符來實現(xiàn)成員長度的指定。

union U {
 
unsigned short int aa;
 
struct {
 
unsigned int bb : 7;//(bit 0-6)
 
unsigned int cc : 6;//(bit 7-12)
 
unsigned int dd : 3;//(bit 13-15)
 
};
 
} u;

以上代碼定義了一個名為U的聯(lián)合,并且定義了U的變量u。

聯(lián)合U包含兩個成員,一個是unsigned short int類型的變量,其大小為2個字節(jié);另一個是一個自定義結構,該自定義結構中包含了3個unsigned int類型的變量。

需要注意的是,每個unsigned int類型的變量的大小并不是默認的4個字節(jié),而是通過冒號操作符指定了其大小,該大小的單位是比特。所以,聯(lián)合u的大小是2個字節(jié)。

之后,對聯(lián)合u中的aa進行賦值

u.aa = 0xE07F;

此時,聯(lián)合u所占的內存數(shù)據如圖5所示。

圖5 聯(lián)合u所占內存數(shù)據

此時,u.bb所處的位置是0-6比特;u.cc所處的位置是7-12比特;u.dd所處的位置是13-15比特,如圖6所示。

圖6 聯(lián)合u的結構

所以,此時u.bb的值是127;u.cc的值是0;u.dd的值是7。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 老生常談C++ explicit關鍵字

    老生常談C++ explicit關鍵字

    這篇文章主要介紹了C++ explicit關鍵字,explicit關鍵字只需用于類內的單參數(shù)構造函數(shù)前面,由于無參數(shù)的構造函數(shù)和多參數(shù)的構造函數(shù)總是顯式調用,這種情況在構造函數(shù)前加explicit無意義,需要的朋友可以參考下
    2023-03-03
  • C++?高精度乘法運算的實現(xiàn)

    C++?高精度乘法運算的實現(xiàn)

    本文主要介紹了C++?高精度乘法運算的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • 基于Qt實現(xiàn)自定義時間選擇控件

    基于Qt實現(xiàn)自定義時間選擇控件

    這篇文章主要為大家詳細介紹了如何基于Qt實現(xiàn)自定義時間選擇控件,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • 詳解C++虛函數(shù)的工作原理

    詳解C++虛函數(shù)的工作原理

    這篇文章主要介紹了C++虛函數(shù)的工作原理的的相關資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • C語言實現(xiàn)圖片放大縮小

    C語言實現(xiàn)圖片放大縮小

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)圖片放大縮小,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++與C#互調dll的實現(xiàn)步驟

    C++與C#互調dll的實現(xiàn)步驟

    這篇文章主要介紹了C++與C#互調dll的實現(xiàn)步驟,dll動態(tài)鏈接庫的共享在一些大型項目中有一定的應用價值,需要的朋友可以參考下
    2014-08-08
  • C語言入門篇--sizeof與strlen基礎理論

    C語言入門篇--sizeof與strlen基礎理論

    本篇文章是c語言基礎篇,主要為大家介紹了C語言的sizeof與strlen的基本理論知識,希望可以幫助大家快速入門c語言的世界,更好的理解c語言
    2021-08-08
  • 數(shù)據結構之矩陣行列和相等的實例

    數(shù)據結構之矩陣行列和相等的實例

    這篇文章主要介紹了數(shù)據結構之矩陣行列和相等的實例的相關資料,希望通過本文能幫助到大家,讓大家掌握這部分內容,需要的朋友可以參考下
    2017-10-10
  • C++ 中dynamic_cast<>的使用方法小結

    C++ 中dynamic_cast<>的使用方法小結

    將一個基類對象指針(或引用)cast到繼承類指針,dynamic_cast會根據基類指針是否真正指向繼承類指針來做相應處理
    2013-03-03
  • 遞歸法求最大公約數(shù)和最小公倍數(shù)的實現(xiàn)代碼

    遞歸法求最大公約數(shù)和最小公倍數(shù)的實現(xiàn)代碼

    今天整理了一下用遞歸法求最大公約數(shù)(gcd)和最小公倍數(shù)(lcm)。主要的工作是求最大公約數(shù)。數(shù)學上可以用輾轉法求最大公約數(shù)
    2013-05-05

最新評論