C語(yǔ)言共用體union作用使用示例教程
共用體 union
什么是共用體 union?這個(gè)共用體,估計(jì)大家平時(shí)在代碼也比較少見(jiàn),我去看了;其實(shí)這個(gè)共用體 union(也叫聯(lián)合體)跟結(jié)構(gòu)體定義是非常像的,比如說(shuō):類(lèi)型定
義、變量定義、使用方法上很相似。就像下面兩個(gè)例子一樣,把許多類(lèi)型聯(lián)合在一起
union st{
char a;
int b;
}共用體也是一種自定義類(lèi)型,可以通過(guò)它來(lái)創(chuàng)建變量,例如:
union num{
int n;
char ch;
double f;
};
union num a, b, c;也可以在定義共用體的同時(shí)創(chuàng)建變量:
union num{
int n;
char ch;
double f;
} a, b, c;
如果不定義新的變量,也可以將共用體的名字省略:
union{
int n;
char ch;
double f;
} a, b, c;開(kāi)鍋解構(gòu)
說(shuō)到這里我扯一下結(jié)構(gòu)體,結(jié)構(gòu)體是用來(lái)存放一組不同類(lèi)型的數(shù)據(jù)。結(jié)構(gòu)體的定義形式為:
struct 結(jié)構(gòu)體名{
結(jié)構(gòu)體所包含的變量或數(shù)組
};
結(jié)構(gòu)體和共用體又有什么淵源嗎?
這里先端上一份代碼:
#include <stdio. h>
typedef union{
int a;
char c;
//int a;
//int b;
}st;
int main(void)
{
st bit;
bit. c='B';
// bit. a=10;
//bit. b=60;
printf("the haha size is%d\n", sizeof(bit));
printf( "haha. c=%d\n", bit. c);
return 0;
}我們可以看到結(jié)果:

通過(guò)上面的代碼,可以發(fā)現(xiàn)這個(gè)共用體的大小,并不是像我們之前結(jié)構(gòu)體那樣是把每個(gè)成員所占內(nèi)存大小加起來(lái),而是我們上面說(shuō)的那樣,共用體由成員占用內(nèi)存大小最大的那個(gè)決定的。
上面的示例中int占用4個(gè)字節(jié)大小,為最大的,所以 sizeof(bit) 得出結(jié)果就是4個(gè)字節(jié)大小,其實(shí)打印出來(lái)的結(jié)果a和b都是60,它是訪問(wèn)內(nèi)存占用大小最大的那個(gè)成員的數(shù)值,因?yàn)槟莻€(gè)’ B '的ASCII碼值是是66。union訪問(wèn)其成員方式跟結(jié)構(gòu)體是一樣滴
其實(shí)結(jié)構(gòu)體類(lèi)似于一個(gè)人體,人體中的器官彼此是獨(dú)立存在的,結(jié)構(gòu)體的成員也是如此,分布在內(nèi)存的不同單元中,他們只是被打包成一個(gè)整體叫做結(jié)構(gòu)體而已;共用體中的各個(gè)成員其實(shí)是一體的,彼此不獨(dú)立,他們使用同一個(gè)內(nèi)存單元。可以理解為:有時(shí)候是這個(gè)元素,有時(shí)候是那個(gè)元素。更準(zhǔn)確的說(shuō)法是同一個(gè)內(nèi)存空間有多種解釋方式。
小結(jié)一手
- 1.union中可以定義多個(gè)成員, union的內(nèi)存大小由最大的成員的大小來(lái)決定。
- 2.union成員共享同一塊大小的內(nèi)存,一次只能使用其中的一個(gè)成員。
- 3.對(duì)某一個(gè)成員賦值,因?yàn)樗麄児灿猛粔K內(nèi)存,所以當(dāng)他們字節(jié)數(shù)相同時(shí),會(huì)覆蓋其他成員的值;但如果不同就只會(huì)覆蓋相同類(lèi)型的成員。比如我賦值給int類(lèi)型,就會(huì)覆蓋其他int 類(lèi)型而char類(lèi)型只會(huì)在旁邊吃瓜,不受影響。
- 4.union的存放順序都是由低地址開(kāi)始存放。
- 5.union中sizeof觀測(cè)到的大小實(shí)際上是union中各個(gè)元素里面占用內(nèi)存的最大的的那個(gè)元素大小。因?yàn)榭梢源娴孟逻@個(gè)就一定可以存的下其他元素。
以上就是C語(yǔ)言共用體union作用使用示例教程的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言共用體union的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- C語(yǔ)言?struct結(jié)構(gòu)體超詳細(xì)講解
- C語(yǔ)言結(jié)構(gòu)體(struct)的詳細(xì)講解
- C語(yǔ)言之結(jié)構(gòu)體(struct)詳解
- C語(yǔ)言結(jié)構(gòu)體(struct)常見(jiàn)使用方法(細(xì)節(jié)問(wèn)題)
- C語(yǔ)言中結(jié)構(gòu)體(struct)的幾種初始化方法
- C語(yǔ)言聯(lián)合體Union特點(diǎn)及運(yùn)用全面講解教程
- C語(yǔ)言 聯(lián)合(union)用法案例詳解
- C語(yǔ)言關(guān)鍵字union的定義和使用詳解
- C語(yǔ)言詳細(xì)分析講解struct與union使用方法
相關(guān)文章
C語(yǔ)言基礎(chǔ)解析之分支與循環(huán)語(yǔ)句
C語(yǔ)言是一門(mén)結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言,當(dāng)C語(yǔ)言用來(lái)描述生活中的事物時(shí),會(huì)用到三種結(jié)構(gòu):順序結(jié)構(gòu)(不去贅述),選擇結(jié)構(gòu)(對(duì)應(yīng)分支語(yǔ)句),循環(huán)結(jié)構(gòu)(對(duì)應(yīng)循環(huán)語(yǔ)句),分支語(yǔ)句:分支語(yǔ)句分為兩種,一種是if語(yǔ)句,一種是switch語(yǔ)句2021-09-09
MFC Frame-Splitter模型實(shí)例原理解析
這篇文章主要介紹了MFC Frame-Splitter模型實(shí)例原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
C語(yǔ)言基于EasyX庫(kù)實(shí)現(xiàn)有圖形界面鐘表
這篇文章主要介紹了C語(yǔ)言基于EasyX庫(kù)實(shí)現(xiàn)有圖形界面鐘表,直線轉(zhuǎn)動(dòng)端點(diǎn)計(jì)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
C++使用HDF5庫(kù)實(shí)現(xiàn)將h5圖像轉(zhuǎn)為tif格式
這篇文章主要為大家詳細(xì)介紹了C++ 語(yǔ)言如何通過(guò)hdf5庫(kù)與gdal庫(kù)實(shí)現(xiàn)將.h5格式的多波段HDF5圖像批量轉(zhuǎn)換為.tif格式,有需要的可以參考一下2024-12-12
C++實(shí)現(xiàn)LeetCode(157.用Read4來(lái)讀取N個(gè)字符)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(157.用Read4來(lái)讀取N個(gè)字符),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

