日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中的union(联合体,共用体,数据变量可以共享内存,以节省内存空间)

發(fā)布時(shí)間:2025/6/17 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中的union(联合体,共用体,数据变量可以共享内存,以节省内存空间) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

union介紹

   C++的union本質(zhì)上也是個(gè)類,跟struct性質(zhì)幾乎一致但是有一個(gè)最大的區(qū)別,數(shù)據(jù)共享內(nèi)存。 說到共享內(nèi)存就要說下union的內(nèi)存分配:union的大小是按照union里面的成員內(nèi)存的最大值而分配的,函數(shù)不占內(nèi)存,但是如果沒有成員或者成員都是函數(shù)時(shí),內(nèi)存分配為1,占位,表明存在。

共用體,也叫聯(lián)合體或共同體,在一個(gè)“聯(lián)合”內(nèi)可以定義多種不同的數(shù)據(jù)類型, 一個(gè)被說明為該“聯(lián)合”類型的變量中,允許裝入該“聯(lián)合”所定義的任何一種數(shù)據(jù),這些數(shù)據(jù)共享同一段內(nèi)存,以達(dá)到節(jié)省空間的目的。union變量所占用的內(nèi)存長度等于最長的成員的內(nèi)存長度。

?

union與struct比較

先看一個(gè)關(guān)于struct的例子:

struct student {char mark;long num;float score; };

其struct的內(nèi)存結(jié)構(gòu)如下,sizeof(struct student)的值為12bytes。

下面是關(guān)于union的例子:

union test {char mark;long num;float score; };

sizeof(union test)的值為4。因?yàn)楣灿皿w將一個(gè)char類型的mark、一個(gè)long類型的num變量和一個(gè)float類型的score變量存放在同一個(gè)地址開始的內(nèi)存單元中,而char類型和long類型所占的內(nèi)存字節(jié)數(shù)是不一樣的,但是在union中都是從同一個(gè)地址存放的,也就是使用的覆蓋技術(shù),這三個(gè)變量互相覆蓋,而這種使幾個(gè)不同的變量共占同一段內(nèi)存的結(jié)構(gòu),稱為“共用體”類型的結(jié)構(gòu)。其union類型的結(jié)構(gòu)如下:

因union中的所有成員起始地址都是一樣的,所以&a.mark、&a.num和&a.score的值都是一樣的。

?

不能如下使用:

union test a; printf("%d", a); //錯(cuò)誤

由于a的存儲(chǔ)區(qū)有好幾種類型,分別占不同長度的存儲(chǔ)區(qū),僅寫共用體變量名a,這樣使編譯器無法確定究竟輸出的哪一個(gè)成員的值。

printf("%d", a.mark); //正確

?

測試大小端

union的一個(gè)用法就是可以用來測試CPU是大端模式還是小端模式:

#include <iostream> using namespace std;void checkCPU() {union MyUnion{int a;char c;}test;test.a = 1;if (test.c == 1)cout << "little endian" <<endl;else cout << "big endian" <<endl; }int main() {checkCPU();return 0; }```union用法舉例:#include <iostream> using namespace std;union test {char mark;long num;float score; }a;int main() {// cout<<a<<endl; // wronga.mark = 'b';cout<<a.mark<<endl; // 輸出'b'cout<<a.num<<endl; // 98 字符'b'的ACSII值cout<<a.score<<endl; // 輸出錯(cuò)誤值a.num = 10;cout<<a.mark<<endl; // 輸出換行 非常感謝suxin同學(xué)的指正cout<<a.num<<endl; // 輸出10cout<<a.score<<endl; // 輸出錯(cuò)誤值a.score = 10.0;cout<<a.mark<<endl; // 輸出空cout<<a.num<<endl; // 輸出錯(cuò)誤值cout<<a.score<<endl; // 輸出10return 0; }C++union上面總結(jié)的union使用法則,在C++中依然適用。如果加入對象呢?#include <iostream> using namespace std;class CA {int m_a; };union Test {CA a;double d; };int main() {return 0; }上面代碼運(yùn)行沒有問題。如果在類CA中添加了構(gòu)造函數(shù),或者添加析構(gòu)函數(shù),就會(huì)發(fā)現(xiàn)程序會(huì)出現(xiàn)錯(cuò)誤。由于union里面的東西共享內(nèi)存,所以不能定義靜態(tài)、引用類型的變量。由于在union里也不允許存放帶有構(gòu)造函數(shù)、析構(gòu)函數(shù)和復(fù)制構(gòu)造函數(shù)等的類的對象,但是可以存放對應(yīng)的類對象指針。編譯器無法保證類的構(gòu)造函數(shù)和析構(gòu)函數(shù)得到正確的調(diào)用,由此,就可能出現(xiàn)內(nèi)存泄漏。所以,在C++中使用union時(shí),盡量保持C語言中使用union的風(fēng)格,盡量不要讓union帶有對象。參考來源:https://www.cnblogs.com/jeakeven/p/5113508.htmlhttps://www.cnblogs.com/yangrlee/p/5170206.html

總結(jié)

以上是生活随笔為你收集整理的C++中的union(联合体,共用体,数据变量可以共享内存,以节省内存空间)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美一区二区三区婷婷 | 国产三级久久久久 | 经典一区二区三区 | 亚洲色图35p | 韩国女主播一区 | 神马久久久久久久久久 | 91香蕉视频黄 | 亚洲视频一区二区三区在线观看 | 亚洲精品久久久久久宅男 | 国产欧美三级 | 欧美精品久久久久a | 特色特色大片在线 | 亚洲人丰满奶水 | 日韩在线不卡av | 人人妻人人澡人人爽精品欧美一区 | 激情小视频在线观看 | 国产又大又长又粗 | 尤物视频在线 | 免费久久av | 日本福利一区 | 欧美丰满熟妇bbb久久久 | 欧美一区影院 | 日韩网红少妇无码视频香港 | 日韩二级片 | 国产xxxxx | 人妻饥渴偷公乱中文字幕 | 青青草综合视频 | 伊人论坛 | 国产精品五区 | fc2成人免费视频 | 欧美一区二区三区激情啪啪 | 天天看天天射 | 成人看的毛片 | 精品91久久久久久 | 欧洲午夜精品 | 男人天堂欧美 | 国产美女诱惑 | 国产精品欧美激情在线 | 日韩免费二区 | 午夜剧场黄色 | 欧美在线网站 | javxxx| 国产精品自拍第一页 | 在线免费av网址 | 欧美人妻一区二区 | 人人爽人人澡 | 美女100%视频免费观看 | 日韩中文字幕在线看 | 在线视频日韩欧美 | 午夜精品影院 | 成人久久精品人妻一区二区三区 | 免费在线一区二区三区 | 国产原创av在线 | 美女网站全黄 | 泰剧19禁啪啪无遮挡 | 久久综合九九 | 国产精品.xx视频.xxtv | 97免费在线观看 | 国产精品久久久久久久久久免费看 | 国产白丝在线观看 | 欧美手机看片 | 日本女优中文字幕 | 美乳人妻一区二区三区 | 国产极品视频在线观看 | 成人毛片网 | 在线观视频免费观看 | 91在线免费视频观看 | 蜜臀久久99精品久久久久宅男 | 处女朱莉 | 亚洲成人第一网站 | 日韩av无码一区二区三区不卡 | 日本不卡中文字幕 | 欧美人与动牲交a欧美精品 欧美三级在线看 | 色婷婷av777 麻豆传媒网站 | 国产精品久久久久久白浆 | 中国毛片在线观看 | 亚洲图片欧美在线 | 好男人www日本 | 最新精品国产 | 乱视频在线观看 | 久久桃色 | 成人av电影免费观看 | 日韩少妇毛片 | 女同一区| 亚洲天堂av网 | a在线v| 精品视频一区二区三区在线观看 | 欧美一级片免费 | 亚洲一区二区日本 | 麻豆网| 懂色tv| 久久一区二区视频 | av日韩一区二区三区 | 加勒比一区二区三区 | 大桥未久在线视频 | 精品久久久久久久久久久久久久久久久久 | 日本人jizz| 国产5区 | 黄色三及 |