C語言 | union共用體,閱后即焚的變量
union共用體即它內(nèi)部的成員,存儲(chǔ)在同一個(gè)地址空間中。




通過圖示,比較生動(dòng)的讓大家看到,不論來了多少個(gè)成員,所有成員只能存儲(chǔ)在同一個(gè)地址空間中。那么地址空間的大小具體應(yīng)該是多大呢?
地址空間的大小取決于最大的數(shù)據(jù)類型,最大的數(shù)據(jù)類型有多大,共用體數(shù)據(jù)的大小就有多少:


從圖示代碼中,可以明確的看到,共用體變量的大小,取決于共用體成員中最大的數(shù)據(jù)類型,即當(dāng)最大的是int型整型變量的時(shí)候,共用體大小就為4字節(jié),當(dāng)為double類型的時(shí)候,共用體大小就變成了8字節(jié)。
那么接下來再帶大家看一下,我們今天的重點(diǎn),也是對(duì)于新手而言比較容易入坑的點(diǎn),小李將這個(gè)特點(diǎn)稱為-“閱后即焚的變量”。

從代碼中,我們可以看到,當(dāng)我們對(duì)公用體的第二個(gè)成員賦值之后,再看共用體的第一個(gè)成員值,也被改變了。這就是對(duì)于共用體的成員都存在同一個(gè)地址空間的體現(xiàn)。一個(gè)char型變量有8位,當(dāng)我們賦值之后,系統(tǒng)就會(huì)在共用體空間的低八位進(jìn)行存儲(chǔ)。從而之前存儲(chǔ)的內(nèi)容就被覆蓋了。

總結(jié),共用體的成員全部存儲(chǔ)在一個(gè)空間中,所以對(duì)于成員的使用,必須要即配即用,閱后即焚,在一個(gè)成員賦值之后,其它的成員的值都會(huì)由于公用地址空間的原因受到影響。
標(biāo)簽: