C語言干貨分享 | C語言的聯(lián)合體
我們知道結(jié)構(gòu)體(Struct)是一種構(gòu)造類型或復雜類型,它可以包含多個類型不同的成員。

在C語言 中,還有另外一種和結(jié)構(gòu)體非常類似的語法,叫做共用體(Union),它的定義格式為:
union 共用體名{ 成員列表 };
共用體有時也被稱為聯(lián)合或者聯(lián)合體,這也是 Union 這個單詞的本意。
結(jié)構(gòu)體和共用體的區(qū)別在于:結(jié)構(gòu)體的各個成員會占用不同的內(nèi)存,互相之間沒有影響;而共用體的所
有成員占用同一段內(nèi)存,修改一個成員會影響其余所有成員。
結(jié)構(gòu)體占用的內(nèi)存大于等于所有成員占用的內(nèi)存的總和(成員之間可能會存在縫隙),共用體占用的內(nèi)
存等于最長的成員占用的內(nèi)存。共用體使用了內(nèi)存覆蓋技術(shù),同一時刻只能保存一個成員的值,如果對
新的成員賦值,就會把原來成員的值覆蓋掉。
運行結(jié)果:

2、結(jié)構(gòu)體冒號的用法
結(jié)構(gòu)體中的冒號表示位域,位域出現(xiàn)的原因是由于某些信息的存儲表示只需要幾個bit位就可以表示而不?需要一個完整的字節(jié),同時也是為了節(jié)省存儲空間和方便處理。
其表示形式為:
struct 位域結(jié)構(gòu)名
{
類型說明符位域名:位域長度
}
其表示形式為:
struct? bit_struct
{
int? bit1:3;
int? bit2:5;
int? bit3:7;
}data;
其中bit_struct表示位域結(jié)構(gòu)體,bit1、bit2、bit3表示對應(yīng)的位域,data表示位域結(jié)構(gòu)體定義的變量。整個位域結(jié)構(gòu)體占用2個字節(jié),bit1占3位,bit2占5位,bit1和bit2共用一個字節(jié),bit3占7位,獨占一個字節(jié)
運行結(jié)果:

3、聯(lián)合使用
舉一個MCP2518FD芯片的例子:先看一下CAN幀格式:

看不懂的小伙伴可以忽略:
另外,對現(xiàn)在我們的大多數(shù)朋友來說還是學編程技術(shù)最重要!栽一棵樹最好的時間是十年前,其次是現(xiàn)在。對于準備學習編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!
微信公眾號:C語言編程學習基地
整理分享(多年學習的源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
